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薇芝。
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為空夯到。
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)的元素為空。
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不存在予借。
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ù)避咆,以字符串形式舟肉。
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ù),交替返回周循。
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ù)贪壳,交替返回。
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ù)识埋,交替返回。
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ù)热监,交替返回。
2.10 獲取元素的索引(score從小到大)
命令:==ZRANK key element==
命令說(shuō)明:在Sorted Set中的元素都是按照score從小到大的順序排序饮寞,如果score相同則按照字典順序排序孝扛。獲取到指定key對(duì)應(yīng)的Sorted Set的element的index值。
返回值:0:第一個(gè)元素的索引幽崩;非0:元素的索引值苦始;空:元素或者key不存在。
2.11 獲取元素的索引(score從大到小)
命令:==ZREVRANK key element==
命令說(shuō)明:在Sorted Set中的元素都是按照score從大到小的順序排序慌申,如果score相同則按照字典順序排序陌选。獲取到指定key對(duì)應(yīng)的Sorted Set的element的index值。
返回值:0:第一個(gè)元素的索引蹄溉;非0:元素的索引值咨油;空:元素或者key不存在。
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ù)量囱晴。
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ù)量枯芬。
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ù)量淫痰。
3. 示例
3.1 排行榜
我們經(jīng)常可以看到在一些比賽中整份,會(huì)展示排行榜的前x名待错。
首先創(chuàng)建一個(gè)Sorted Set,然后我們將name和score存入烈评。最后獲取的時(shí)候按照index或者score范圍查詢即可火俄。
==獲取前5名==
==獲取分?jǐn)?shù)排名前5==
3.2 排行榜--分頁(yè)
假設(shè)我們的排行榜上面不僅僅有分?jǐn)?shù),還有參賽者的介紹等等讲冠。
所以:
冠軍:一頁(yè)展示
亞軍瓜客,季軍:一頁(yè)展示
第4~10名:一頁(yè)展示
第20~50名:一頁(yè)展示
3.3 排行榜查詢
如果排行榜比較多的時(shí)候,玩家需要查詢自己在排行榜中的位置竿开。
3.4 定期清理超時(shí)數(shù)據(jù)
將數(shù)據(jù)的超時(shí)時(shí)間設(shè)置為分?jǐn)?shù)忆家,定期清理到時(shí)間的數(shù)據(jù)。