Redis系列(六)、數據類型之有序集合ZSet(sorted_set)

目錄

介紹

命令行模式

交集

並集

應用場景


Redis支持五種數據類型:String, Hash, List, Set, ZSet,這個系列介紹一下如何使用這些數據類型,本篇介紹使用命令行模式以及python客戶端對redis進行操作,實際項目的過程中也大多是一模一樣的用法。

相關內容:

Redis系列(一)、CentOS7下安裝Redis6.0.3穩定版

Redis系列(二)、數據類型之字符串String 

Redis系列(三)、數據類型之哈希Hash

Redis系列(四)、數據類型之列表List

Redis系列(五)、數據類型之無序集合Set

------------------------Redis有序集合類型----------------------

介紹

Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重複的成員。
不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來爲集合中的成員進行從小到大的排序。
有序集合的成員是唯一的,但分數(score)卻可以重複。
集合是通過哈希表實現的,所以添加,刪除,查找的複雜度都是O(1)。 集合中最大的成員數爲 2^32 - 1 (4294967295, 每個集合可存儲40多億個成員)。

命令行模式

進入命令行模式:

redis-cli -a password_value
 
redis-cli -a password_value --raw
--raw 避免中文顯示亂碼

help

使用下面的命令查看手冊:

help @sorted_set

 

zadd

往有序集合中新增成員,需要指定該成員的分數,分數可以是整形或浮點型,當分數相同時候,索引下標按照字典排序:

ZADD key [NX|XX] [CH] [INCR] score member [score member ...]

zcard

獲取有序集合的成員數:

ZCARD key

 

zcount

從有序集合內獲取指定分數區間內的成員數:

ZCOUNT key min max

 

zlexcount

根據字典排序返回min ,max之間的數據量,具體lex的介紹請參考下面的ZRANGEBYLEX部分:

ZLEXCOUNT key min max

zscore

返回有序集中,成員的分數值,不存在的成員返回空:

ZSCORE key member

 

zscan

用於迭代有序集合中的元素(包括元素成員和元素分值)並將匹配到的值返回:

ZSCAN key cursor [MATCH pattern] [COUNT count]

 

zrange

根據下標查看集合內所有成員(及分數),[start,stop]:

ZRANGE key start stop [WITHSCORES]

 

zrangebylex

 通過字典區間返回有序集合的成員:

min:字典中排序位置較小的成員,必須以"[" 或者以"("開頭,可使用"-"代替, "["代表閉區間,"("代表開區間

max:字典中排序位置較大的成員,必須以"[" 或者以"("開頭,可使用"+"代替, "["代表閉區間,"("代表開區間

不要在分數不一致的SortSet集合中去使用 ZRANGEBYLEX 指令,因爲獲取的結果並不準確。

limit offset count: 分片查詢,limit爲關鍵字,offset表示從結果集的哪個下標開始分片,count表示分片的數據量。

ZRANGEBYLEX key min max [LIMIT offset count]

 

zrangebyscore

 根據分數查看集合內所有成員(及分數),[start,stop]:

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

 

zrank

返回有序集合中指定成員的索引(下標):

ZRANK key member

 

zrevrange

與zrange功能類似,不同的是zrevrange會將集合先反序[reverse]之後再執行zrange返回:

ZREVRANGE key start stop [WITHSCORES]

 

zrevrangebylex

結合zrangebylex和zrevrange功能。反序通過字典區間返回有序集合的成員:

ZREVRANGEBYLEX key max min [LIMIT offset count]

zrevrangebyscore

結合zrangebyscore和zrevrange功能。反序通過分數區間返回有序集合的成員:

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

zrevrank

結合zrank和zrevrange功能。反序返回有序集合中指定成員的索引(下標):

ZREVRANK key member

zpopmax

redis5版本之後的新功能。從集合中彈出分數最高的成員,返回該成員和分值,然後從集合中將其移出:

ZPOPMAX key [count]

 

zpopmin

redis5版本之後的新功能。與zpopmax相反,從集合中彈出分數最低的成員,返回該成員和分值,然後從集合中將其移出:

ZPOPMIN key [count]

 

bzpopmax

redis5版本之後的新功能。在參數中的所有有序集合均爲空的情況下,阻塞連接。參數中包含多個有序集合時,按照參數中key的順序,返回第一個非空key中分數最大的成員和對應的分數。參數 timeout 可以理解爲客戶端被阻塞的最大秒數值,0 表示永久阻塞。

BZPOPMAX key [key ...] timeout

 

bzpopmin

 redis5版本之後的新功能。與bzpopmax相反。在參數中的所有有序集合均爲空的情況下,阻塞連接。參數中包含多個有序集合時,按照參數中key的順序,返回第一個非空key中分數最小的成員和對應的分數。參數 timeout 可以理解爲客戶端被阻塞的最大秒數值,0 表示永久阻塞。

BZPOPMIN key [key ...] timeout

 

zrem

從集合中移除指定的成員:

ZREM key member [member ...]

zremrangebylex

結合zrem和zrangebylex功能:將zrangebylex匹配的結果從有序集合中刪除:

ZREMRANGEBYLEX key min max

zremrangebyrank

結合zrem和zrank功能:將zrank匹配的結果從有序集合中刪除:

ZREMRANGEBYRANK key start stop

zremrangebyscore

結合zrem和zrangebyscore功能:將zrangebyscore匹配的結果從有序集合中刪除:

ZREMRANGEBYSCORE key min max

zincrby

修改有序集合內成員的分數,將有序集合內成員的分數增加increment分值,increment可以爲浮點型整型也可以爲負數或正數:

ZINCRBY key increment member

交集

zinterstore

計算給定的一個或多個有序集的交集並將結果集存儲在新的有序集合 key 中,給定 key 的數量必須以 numkeys 參數指定,並將該交集(結果集)儲存到 destination ,默認情況下,結果集中某個成員的分數值是所有給定集下該成員分數值之和,可以使用aggregate參數指定將相同成員的分數取最小值或最大值:

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

 

並集

zunionstore

計算給定的一個或多個有序集的並集,並存儲在新的 key 中:

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

 

應用場景

  1. 點贊排行
  2. 排行榜
  3. 顯示分數和信息(如學生分數排名)

 

Python客戶端與命令行函數基本上完全一致,篇幅太長因此不再過多的展示。

希望本文對你有幫助,請點個贊鼓勵一下作者吧~ 謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章