成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Redis常用數據結構介紹和業務應用場景分析

開發 前端
redis內置了很多常用數據結構,了解這些數據結構的功能和應用場景能夠讓我們在需求開發時靈活運用來解決實際問題。

redis數據結構

redis內置了很多常用數據結構,了解這些數據結構的功能和應用場景能夠讓我們在需求開發時靈活運用來解決實際問題。

Strings字符串、數字

String是redis中最基礎的數據結構,你可以把它用作緩存最基礎的kv(key-value)類型的緩存(value最大為512MB),只需要把需要緩存的對象進行string的編解碼即可。另外String也可以保存數值類型的數據,就可以來實現計數功能(redi提供了incr等原子操作)

常見應用場景

  • 計數器: 保存各種計數(比如視頻播放數、點贊數、活動參與人數、剩余庫存數、紅包總金額)
  • kv: key value類型的緩存數據,比如保存一篇文章的內容、保存一個用戶的信息等等
  • 分布式限流: 通過帶有過期時間的計數器,每次請求減一判斷是否大于等于0,能夠實現一些分布式限流的功能,比如限制一分鐘內接口請求數不超過1000,還可以實現一個用戶一分鐘內發布評論不超過N個的功能。
  • 分布式鎖: 通過string的setnx,可以實現簡單的分布式鎖,比如限制一個用戶不要同時請求接口(避免接口處理過程中的用戶維度并發操作導致數據錯誤)。(有人會提出質疑說網上的redis分布式鎖有這樣那樣的問題,其實大部分需要分布式鎖的場景都是比較簡單的,要實現出一個完美的分布式解決方案,可能會比較重影響接口性能或者實現復雜)

List

List列表更多的時候是把它當成隊列使用(最大2^32 - 1個元素),使用入隊出隊功能,如果來使用它作為各種列表的話,很多時候不具備防重功能在使用的時候不是很方便。

常見應用場景

  • 搶紅包: 發紅包、拆紅包入隊,搶紅包則是出隊

Set

Set是一種無序不重復的集合,添加刪除檢查是否存在都是O(1)的時間復雜度。

Sorted Set

Sorted Set是結合了List和Set的一種數據結構,有序(按照元素score排序)的不重復(元素key不重復)的集合,Sorted Set是在業務開發中非常常用的數據結構(比List和Set應用面更廣),因為在實際需求中,存在非常多的列表場景,比如視頻列表、評論列表、關注列表、點贊列表、排行榜等等各種列表,每個列表都要按照一定規則排序,并且大部分都不能重復,所以使用Sorted Set就非常合適。

常見應用場景

  • 排行榜等榜單: 排行用的分數作為score
  • 列表分頁: member存儲列表元素的id(視頻id、用戶id等),元素的id(具備遞增且唯一)作為score(如果量級比較小QPS很低用時間戳也可以不會有多少重復時間戳),使用zrevrangebyscore進行分頁查詢,使用zscore判斷是否關注等。

Hash

hash是一個map結構,可以像存儲對象的多個字段一樣存儲一個key的多類數據。

常見應用場景

  • 保存一個對象的多個字段,比如一篇文章的作者、發布時間、標簽等等信息作為一個hash上的多個字段保存。

PubSub

redis中的pub/sub可以實現廣播功能,類似rocketmq中的broadcast

常見應用場景

  • websocket場景,server給client發送消息時,由于不知道client和那個server建立的鏈接,所以可以通過發送廣播,讓對應的server發送消息。

其他數據結構

除了上述最基本的數據結構外,redis還提供了一些其他的數據結構,有的是需要安裝相關redis stack來使用的。

bitmap

bitmap本質上還是使用的string字符串,不過可以通過bit來進行操作,把這個key的value值想象成bit組成的數組。

常見應用場景

  • 記錄多個是否的標記為: 比如記錄一個用戶是否是會員、是否是認證用戶等等這類是否的標記,這些標記作為一個用戶的一個bitmap上的不同index上的bit位,這樣只需要請求一次就可以獲取到一個用戶的多種標記信息,并且存儲上相對kv存儲也比較節省資源。一個bitmap最多可以存儲512MB的數據,一共有2^32個bit位,所以能夠存儲非常多的數據,比如簽到場景可以存儲一個用戶某一天是否簽到過。

bloomfilter

bloomfilter(也叫布隆過濾器)可以理解成一種特殊的set集合,它可以用來判斷一個值是否在這個集合中,不過不同于普通的set,它的判斷存在一定誤判的可能(假陽性),如果bloomfilter判斷一個值不在這個集合中,那么一定不在,但是如果判斷在,那么有可能不在。

常見應用場景

減少請求量、緩存穿透量: 比如為了防止大量請求查詢緩存不存在穿透到數據庫中查詢,我們可以在緩存查詢前加一層布隆過濾器的查詢,如果不在布隆過濾器中,說明數據肯定不在數據庫和緩存中,就不需要繼續查詢了。

hyperloglog

hyperloglog是一種概率性的去重計數數據結構,可以實現一定精度的去重計數

常見應用場景

  • 各類需要去重的計數,但是有不希望保存所有的記錄數據: 文章閱讀數、網站訪客數等等

geohash

geohash可以實現距離計算、距離查詢等地理位置相關的功能

常見應用場景

  • 距離判斷、附近的人
責任編輯:華軒 來源: 今日頭條
相關推薦

2024-03-13 14:57:37

2009-06-03 14:00:51

ibmdwWebSphere業務

2015-08-03 13:36:40

Docker技術優勢應用場景

2015-09-07 09:27:01

分析應用場景

2023-11-13 08:31:25

SpringRedis存儲

2014-05-15 09:43:11

CloudaMobile WebANodejs

2010-08-31 19:45:26

DHCP server

2012-04-28 14:21:47

Java數據結構線性結構

2015-08-04 17:45:54

Docker應用

2021-09-02 18:47:02

redis存儲中間件Remote Dict

2019-10-08 10:01:22

Kafka應用場景架構

2019-03-27 15:35:35

大數據招聘互聯網

2022-02-22 15:27:46

數據結構容器算法

2024-05-08 07:17:29

向量數據庫數據架構大模型

2018-08-15 09:48:27

數據庫Redis應用場景

2010-10-17 14:30:20

業務分析與優化云計算物聯網

2013-09-09 15:55:12

SDN應用場景

2024-08-19 14:06:00

2024-10-11 16:43:05

高并發數據結構技巧

2015-09-25 10:39:16

大數據工具應用場景
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久成人一区 | 国产精品久久久乱弄 | 中文二区 | 伊人二区 | 精品亚洲一区二区三区 | 亚洲精品一区二区网址 | 国产欧美一区二区精品忘忧草 | 中文字幕亚洲区 | 九色 在线 | 午夜影院 | 久国产| 日本一区视频在线观看 | 毛片在线视频 | 国产一在线| 欧美另类视频在线 | 亚洲一区视频在线 | 91麻豆精品国产91久久久久久 | 操操操日日日 | 99久久婷婷 | 午夜三区 | 国产成人精品区一区二区不卡 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 欧美日韩国产中文 | 日本成人中文字幕 | 国产日韩精品久久 | 性色av网站 | 精品国偷自产在线 | 亚洲一区二区三区在线 | 在线伊人网 | 亚洲www啪成人一区二区 | 久久精品国产精品青草 | 2018天天干天天操 | 一区二区三区回区在观看免费视频 | 新超碰97 | 九热在线| 国产偷录叫床高潮录音 | 色综合天天综合网国产成人网 | 欧美黑人激情 | 亚洲免费一| 国产aa | 久久午夜视频 |