自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Redis常用數(shù)據(jù)結(jié)構(gòu)介紹和業(yè)務(wù)應(yīng)用場(chǎng)景分析

開發(fā) 前端
redis內(nèi)置了很多常用數(shù)據(jù)結(jié)構(gòu),了解這些數(shù)據(jù)結(jié)構(gòu)的功能和應(yīng)用場(chǎng)景能夠讓我們?cè)谛枨箝_發(fā)時(shí)靈活運(yùn)用來解決實(shí)際問題。

redis數(shù)據(jù)結(jié)構(gòu)

redis內(nèi)置了很多常用數(shù)據(jù)結(jié)構(gòu),了解這些數(shù)據(jù)結(jié)構(gòu)的功能和應(yīng)用場(chǎng)景能夠讓我們?cè)谛枨箝_發(fā)時(shí)靈活運(yùn)用來解決實(shí)際問題。

Strings字符串、數(shù)字

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

常見應(yīng)用場(chǎng)景

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

List

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

常見應(yīng)用場(chǎng)景

  • 搶紅包: 發(fā)紅包、拆紅包入隊(duì),搶紅包則是出隊(duì)

Set

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

Sorted Set

Sorted Set是結(jié)合了List和Set的一種數(shù)據(jù)結(jié)構(gòu),有序(按照元素score排序)的不重復(fù)(元素key不重復(fù))的集合,Sorted Set是在業(yè)務(wù)開發(fā)中非常常用的數(shù)據(jù)結(jié)構(gòu)(比List和Set應(yīng)用面更廣),因?yàn)樵趯?shí)際需求中,存在非常多的列表場(chǎng)景,比如視頻列表、評(píng)論列表、關(guān)注列表、點(diǎn)贊列表、排行榜等等各種列表,每個(gè)列表都要按照一定規(guī)則排序,并且大部分都不能重復(fù),所以使用Sorted Set就非常合適。

常見應(yīng)用場(chǎng)景

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

Hash

hash是一個(gè)map結(jié)構(gòu),可以像存儲(chǔ)對(duì)象的多個(gè)字段一樣存儲(chǔ)一個(gè)key的多類數(shù)據(jù)。

常見應(yīng)用場(chǎng)景

  • 保存一個(gè)對(duì)象的多個(gè)字段,比如一篇文章的作者、發(fā)布時(shí)間、標(biāo)簽等等信息作為一個(gè)hash上的多個(gè)字段保存。

PubSub

redis中的pub/sub可以實(shí)現(xiàn)廣播功能,類似rocketmq中的broadcast

常見應(yīng)用場(chǎng)景

  • websocket場(chǎng)景,server給client發(fā)送消息時(shí),由于不知道client和那個(gè)server建立的鏈接,所以可以通過發(fā)送廣播,讓對(duì)應(yīng)的server發(fā)送消息。

其他數(shù)據(jù)結(jié)構(gòu)

除了上述最基本的數(shù)據(jù)結(jié)構(gòu)外,redis還提供了一些其他的數(shù)據(jù)結(jié)構(gòu),有的是需要安裝相關(guān)redis stack來使用的。

bitmap

bitmap本質(zhì)上還是使用的string字符串,不過可以通過bit來進(jìn)行操作,把這個(gè)key的value值想象成bit組成的數(shù)組。

常見應(yīng)用場(chǎng)景

  • 記錄多個(gè)是否的標(biāo)記為: 比如記錄一個(gè)用戶是否是會(huì)員、是否是認(rèn)證用戶等等這類是否的標(biāo)記,這些標(biāo)記作為一個(gè)用戶的一個(gè)bitmap上的不同index上的bit位,這樣只需要請(qǐng)求一次就可以獲取到一個(gè)用戶的多種標(biāo)記信息,并且存儲(chǔ)上相對(duì)kv存儲(chǔ)也比較節(jié)省資源。一個(gè)bitmap最多可以存儲(chǔ)512MB的數(shù)據(jù),一共有2^32個(gè)bit位,所以能夠存儲(chǔ)非常多的數(shù)據(jù),比如簽到場(chǎng)景可以存儲(chǔ)一個(gè)用戶某一天是否簽到過。

bloomfilter

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

常見應(yīng)用場(chǎng)景

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

hyperloglog

hyperloglog是一種概率性的去重計(jì)數(shù)數(shù)據(jù)結(jié)構(gòu),可以實(shí)現(xiàn)一定精度的去重計(jì)數(shù)

常見應(yīng)用場(chǎng)景

  • 各類需要去重的計(jì)數(shù),但是有不希望保存所有的記錄數(shù)據(jù): 文章閱讀數(shù)、網(wǎng)站訪客數(shù)等等

geohash

geohash可以實(shí)現(xiàn)距離計(jì)算、距離查詢等地理位置相關(guān)的功能

常見應(yīng)用場(chǎng)景

  • 距離判斷、附近的人
責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2024-03-13 14:57:37

2009-06-03 14:00:51

ibmdwWebSphere業(yè)務(wù)

2015-08-03 13:36:40

Docker技術(shù)優(yōu)勢(shì)應(yīng)用場(chǎng)景

2023-11-13 08:31:25

SpringRedis存儲(chǔ)

2015-09-07 09:27:01

分析應(yīng)用場(chǎng)景

2010-08-31 19:45:26

DHCP server

2015-08-04 17:45:54

Docker應(yīng)用

2014-05-15 09:43:11

CloudaMobile WebANodejs

2012-04-28 14:21:47

Java數(shù)據(jù)結(jié)構(gòu)線性結(jié)構(gòu)

2021-09-02 18:47:02

redis存儲(chǔ)中間件Remote Dict

2019-10-08 10:01:22

Kafka應(yīng)用場(chǎng)景架構(gòu)

2019-03-27 15:35:35

大數(shù)據(jù)招聘互聯(lián)網(wǎng)

2024-05-08 07:17:29

向量數(shù)據(jù)庫數(shù)據(jù)架構(gòu)大模型

2022-02-22 15:27:46

數(shù)據(jù)結(jié)構(gòu)容器算法

2018-08-15 09:48:27

數(shù)據(jù)庫Redis應(yīng)用場(chǎng)景

2010-10-17 14:30:20

業(yè)務(wù)分析與優(yōu)化云計(jì)算物聯(lián)網(wǎng)

2013-09-09 15:55:12

SDN應(yīng)用場(chǎng)景

2024-10-11 16:43:05

高并發(fā)數(shù)據(jù)結(jié)構(gòu)技巧

2024-08-19 14:06:00

2018-08-17 16:13:52

大數(shù)據(jù)工具分析
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)