redis--sorted set

1. 介紹

Sorted Set是字符串的集合耻陕,不允許重復(fù)的成員出現(xiàn)在一個(gè)Set中豪娜。Sorted Set是有序集合,在Sorted Sett內(nèi)部的每一個(gè)元素梅惯,都有一個(gè)score與value關(guān)聯(lián)馍刮。Sort Set的有序性就是通過(guò)score保證的信夫。Sorted Set屬于Set,具有Set的全部特性卡啰,同時(shí)Sorted Set擁有Set的額外的一個(gè)特性Sort静稻。盡管Set的value不允許重復(fù),但是score卻是允許重復(fù)的匈辱。

在Set中增加振湾、刪除、更新元素是一個(gè)資源消耗非常小的操作亡脸。因?yàn)镾orted Set是有序的押搪,所以即使訪問(wèn)Set的中部的元素佛南,依然具有很高的效率。這是Redis的優(yōu)勢(shì)嵌言,其他數(shù)據(jù)庫(kù)中想要實(shí)現(xiàn)這一點(diǎn),比較困難及穗。

2. 命令

2.1 增加

命令:==ZADD key score element [score element ....]==

命令說(shuō)明:增加Sorted Set元素摧茴,如果key不存在,那么會(huì)創(chuàng)建key埂陆,如果element不存在苛白,那么會(huì)將element加入key的Sorted Set.如果element已經(jīng)在key對(duì)應(yīng)的Sorted Set中了,那么就更新element的score焚虱,更新了score购裙,就會(huì)進(jìn)行重新排序。如果key對(duì)應(yīng)的不是Sorted Set鹃栽,那么執(zhí)行異常躏率。

返回值:實(shí)際增加的element數(shù)量。0:element本來(lái)就存在民鼓,本次只是進(jìn)行了更新score薇芝。

image-20200717150604983

2.2 統(tǒng)計(jì)個(gè)數(shù)

命令:==ZCARD key==

命令說(shuō)明:獲取key對(duì)應(yīng)的Sorted Set的element數(shù)量。

返回值:返回key對(duì)應(yīng)的Sorted Set的元素?cái)?shù)量丰嘉。0:key不存在或者Sorted Set為空夯到。

image-20200717152059938

2.3 統(tǒng)計(jì)指定分?jǐn)?shù)范圍的元素個(gè)數(shù)

命令:==ZCOUNTT key [(]min [(]max==

命令說(shuō)明:統(tǒng)計(jì)key對(duì)應(yīng)的Sorted Set中元素的score在min和max范圍內(nèi)的元素?cái)?shù)量。==min表示閉區(qū)間饮亏,(min表示開(kāi)區(qū)間耍贾;max表示閉區(qū)間,(max表示開(kāi)區(qū)間路幸。開(kāi)閉區(qū)間可以自由搭配荐开。==如果key對(duì)應(yīng)的不是Sorted Set,執(zhí)行異常劝赔。

返回值:指定key對(duì)應(yīng)的Sorted Set的元素的score在指定區(qū)間內(nèi)的元素?cái)?shù)量誓焦。0:key不存在或者score區(qū)間內(nèi)的元素為空。

image-20200717152756007

2.4 獲取分?jǐn)?shù)

命令:==ZSCORE key element==

命令說(shuō)明:獲取指定key的Sorted Set的指定element的score着帽。如果key對(duì)應(yīng)的不是Sorted Set杂伟,執(zhí)行異常。

返回值:字符串形式的分?jǐn)?shù)仍翰『罩啵空:key不存在,或者element不存在予借。

image-20200717154152583

2.5 增加分?jǐn)?shù)

命令:==ZINCRBY key increment element==

命令說(shuō)明:指定的key的Sorted Set的指定的element的score更新為score+increment越平。如果key不存在频蛔,則創(chuàng)建key對(duì)應(yīng)的Sorted Set。如果指定key對(duì)應(yīng)的Sorted Set中不存在element則秦叛,新增element晦溪,并且設(shè)置原score為0,然后將0+increment設(shè)置為新的score挣跋。如果key對(duì)應(yīng)的不是Sorted Set三圆,執(zhí)行異常。

返回值:更新后的分?jǐn)?shù)避咆,以字符串形式舟肉。

image-20200718114418653

2.6 獲取指定范圍的元素(score從小到大)

命令:==ZRANGE key start end [WITHSCORES]==

命令說(shuō)明:獲取指定key對(duì)應(yīng)的Sorted Set在start到end(index)范圍內(nèi)的元素(score從小到大)。==如果有[WITHSCORES]那么返回元素的時(shí)候會(huì)將score一起返回查库。==start:0路媚,第一個(gè)元素;-1樊销,最后一個(gè)元素整慎。如果start > end返回空列表;如果end > length返回start之后的全部元素围苫。如果key對(duì)應(yīng)的不是Sorted Set院领,執(zhí)行異常。

返回值:元素列表够吩。一個(gè)元素比然,一個(gè)分?jǐn)?shù),交替返回周循。

image-20200718115021256

2.7 獲取指定范圍的元素(score從大到小)

命令:==ZREVRANGE key start end [WITHSCORES]==

命令說(shuō)明:獲取指定key對(duì)應(yīng)的Sorted Set在start到end(index)范圍內(nèi)的元素(score從大到小)强法。==如果有[WITHSCORES]那么返回元素的時(shí)候會(huì)將score一起返回。==start:0湾笛,第一個(gè)元素饮怯;-1,最后一個(gè)元素嚎研。如果start > end返回空列表蓖墅;如果end > length返回start之后的全部元素。如果key對(duì)應(yīng)的不是Sorted Set临扮,執(zhí)行異常论矾。

返回值:元素列表。一個(gè)元素杆勇,一個(gè)分?jǐn)?shù)贪壳,交替返回。

image-20200718115402428

2.8 獲取指定分?jǐn)?shù)范圍的元素(score從小到大)

命令:==ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]==

命令說(shuō)明:獲取指定key的Sorted Set中score在min和max的閉區(qū)間內(nèi)的元素(score從小到大)蚜退。WITHSCORES一起返回元素和分?jǐn)?shù)闰靴,交替返回彪笼。LIMIT offset count表示從滿足條件列表的第offset開(kāi)始返回,返回count個(gè)蚂且。min和max可以使用==(==來(lái)使用開(kāi)區(qū)間配猫。==如果分?jǐn)?shù)相同,則按照字典順序返回杏死。==

返回值:元素列表章姓。一個(gè)元素,一個(gè)分?jǐn)?shù)识埋,交替返回。

image-20200718120105294

2.9 獲取指定分?jǐn)?shù)范圍的元素(score從大到小)

命令:==ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]==

命令說(shuō)明:獲取指定key的Sorted Set中score在min和max的閉區(qū)間內(nèi)的元素(score從大到小)零渐。WITHSCORES一起返回元素和分?jǐn)?shù)窒舟,交替返回。LIMIT offset count表示從滿足條件列表的第offset開(kāi)始返回诵盼,返回count個(gè)惠豺。min和max可以使用==(==來(lái)使用開(kāi)區(qū)間。==如果分?jǐn)?shù)相同风宁,則按照字典順序返回洁墙。==

返回值:元素列表。一個(gè)元素戒财,一個(gè)分?jǐn)?shù)热监,交替返回。

image-20200718130203688

2.10 獲取元素的索引(score從小到大)

命令:==ZRANK key element==

命令說(shuō)明:在Sorted Set中的元素都是按照score從小到大的順序排序饮寞,如果score相同則按照字典順序排序孝扛。獲取到指定key對(duì)應(yīng)的Sorted Set的element的index值。

返回值:0:第一個(gè)元素的索引幽崩;非0:元素的索引值苦始;空:元素或者key不存在。

image-20200718130724359

2.11 獲取元素的索引(score從大到小)

命令:==ZREVRANK key element==

命令說(shuō)明:在Sorted Set中的元素都是按照score從大到小的順序排序慌申,如果score相同則按照字典順序排序陌选。獲取到指定key對(duì)應(yīng)的Sorted Set的element的index值。

返回值:0:第一個(gè)元素的索引蹄溉;非0:元素的索引值咨油;空:元素或者key不存在。

image-20200718131026439

2.12 刪除

命令:==ZREM key element [element ...]==

命令說(shuō)明:刪除指定key對(duì)應(yīng)的Sorted Set中指定的lelement的元素柒爵。如果元素或者key不存在臼勉,則什么都不做。如果key對(duì)應(yīng)的不是Sorted Set餐弱,執(zhí)行異常宴霸。

返回值:實(shí)際被刪除的element的數(shù)量囱晴。

image

2.13 根據(jù)索引范圍刪除

命令:==ZREMRANGEBYRANK key start end==

命令說(shuō)明:刪除指定key對(duì)應(yīng)的Sorted Set中索引在start和end區(qū)間內(nèi)的元素。start為0表示第一個(gè)索引瓢谢,為-1表示最后一個(gè)索引畸写。如果key對(duì)應(yīng)的不是Sorted Set,執(zhí)行異常氓扛。

返回值:實(shí)際被刪除的element的數(shù)量枯芬。

image-20200718131905805

2.14 根據(jù)分?jǐn)?shù)范圍刪除

命令:==ZREMRANGEBYSCORE** key min max==

命令說(shuō)明:刪除指定key對(duì)應(yīng)的Sorted Set中分?jǐn)?shù)在min和max閉區(qū)間內(nèi)的元素〔衫桑可以使用==(==使用開(kāi)區(qū)間千所。如果key對(duì)應(yīng)的不是Sorted Set,執(zhí)行異常蒜埋。

返回值:實(shí)際被刪除的element的數(shù)量淫痰。

image-20200718132550050

3. 示例

3.1 排行榜

我們經(jīng)常可以看到在一些比賽中整份,會(huì)展示排行榜的前x名待错。

首先創(chuàng)建一個(gè)Sorted Set,然后我們將name和score存入烈评。最后獲取的時(shí)候按照index或者score范圍查詢即可火俄。

==獲取前5名==

image-20200718133843096

==獲取分?jǐn)?shù)排名前5==

image-20200718134223579

3.2 排行榜--分頁(yè)

假設(shè)我們的排行榜上面不僅僅有分?jǐn)?shù),還有參賽者的介紹等等讲冠。

所以:

冠軍:一頁(yè)展示

亞軍瓜客,季軍:一頁(yè)展示

第4~10名:一頁(yè)展示

第20~50名:一頁(yè)展示

image-20200718134913095

3.3 排行榜查詢

如果排行榜比較多的時(shí)候,玩家需要查詢自己在排行榜中的位置竿开。

image-20200718135903986

3.4 定期清理超時(shí)數(shù)據(jù)

將數(shù)據(jù)的超時(shí)時(shí)間設(shè)置為分?jǐn)?shù)忆家,定期清理到時(shí)間的數(shù)據(jù)。

image-20200718140417390
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末德迹,一起剝皮案震驚了整個(gè)濱河市芽卿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胳搞,老刑警劉巖卸例,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肌毅,居然都是意外死亡筷转,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門悬而,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)呜舒,“玉大人,你說(shuō)我怎么就攤上這事笨奠∠龋” “怎么了唤殴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)到腥。 經(jīng)常有香客問(wèn)我朵逝,道長(zhǎng),這世上最難降的妖魔是什么乡范? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任配名,我火速辦了婚禮,結(jié)果婚禮上晋辆,老公的妹妹穿的比我還像新娘渠脉。我一直安慰自己,他們只是感情好瓶佳,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布芋膘。 她就那樣靜靜地躺著,像睡著了一般涩哟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盼玄,一...
    開(kāi)封第一講書(shū)人閱讀 52,785評(píng)論 1 314
  • 那天贴彼,我揣著相機(jī)與錄音,去河邊找鬼埃儿。 笑死器仗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的童番。 我是一名探鬼主播精钮,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼剃斧!你這毒婦竟也來(lái)了轨香?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤幼东,失蹤者是張志新(化名)和其女友劉穎臂容,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體根蟹,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脓杉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了简逮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片球散。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖散庶,靈堂內(nèi)的尸體忽然破棺而出蕉堰,到底是詐尸還是另有隱情凌净,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布嘁灯,位于F島的核電站泻蚊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏丑婿。R本人自食惡果不足惜性雄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望羹奉。 院中可真熱鬧秒旋,春花似錦、人聲如沸诀拭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)耕挨。三九已至细卧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間筒占,已是汗流浹背贪庙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翰苫,地道東北人止邮。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像奏窑,于是被迫代替她去往敵國(guó)和親导披。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361