目錄
Redis支持五種數據類型:String, Hash, List, Set, ZSet,這個系列介紹一下如何使用這些數據類型,本篇介紹使用命令行模式以及python客戶端對redis進行操作,實際項目的過程中也大多是一模一樣的用法。
相關內容:
Redis系列(一)、CentOS7下安裝Redis6.0.3穩定版
------------------------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]
應用場景
- 點贊排行
- 排行榜
- 顯示分數和信息(如學生分數排名)
Python客戶端與命令行函數基本上完全一致,篇幅太長因此不再過多的展示。
希望本文對你有幫助,請點個贊鼓勵一下作者吧~ 謝謝!