1、概念
引用原著:
A Redis sorted set is a collection of unique strings (members) ordered by an associated score.
與hash的結構基本相同,區別在於value值只能是數字,且會根據value值升序排序。
2、操作
2.1 基礎
按照新增,查詢,修改,刪除的順序。
2.1.1 zadd
格式:
ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member ...]
元素操作,往zset中一次性添加多個元素。
第一部分,NX,XX,NX只添加元素,當元素存在時,無意義。XX只更新元素,元素不存在時,無意義。
第二部分,GT,LT。當前元素存在,且命令行參數的score大於或者小於原始值時,更新,否則無意義。
第三部分,CH,
第四部分,INCR,當添加此選項時,等價於ZINCRBY命令。鍵值對只能出現一個,含義是在原始值上添加參數指定的score值。
特殊說明:
Key不存在時,會創建一個空的zset
Key存在,value類型不爲zset時,拋錯。
當score不合規時,拋錯。+inf表示正無窮,-inf表示負無窮,都是可以的。
示例:略
2.1.2 zscore & zmscore
格式:
ZSCORE key member
元素操作,在zset中查詢member的score。
特殊說明:
當key或者member不存在時,返回nil。
示例:略
zmscore,m全稱爲multiple,一次性查詢多個member,返回值與member參數順序一致。
2.1.3 zrange
格式:
ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
元素操作,在zset中進行範圍查詢。
第一部分,start, stop表示起始位置,截止位置,當start大於stop時,無返回。Stop爲負值時,從末尾開始。stop大於元素個數時,設置爲最大值。
第二部分,byscore, bylex, 根據score排序,根據lex排序。默認根據index排序,所以start, stop爲索引值。當byscore時,start, stop爲score值。當爲lex,start stop爲member的名稱。
第三部分,rev,排序方式,加上rev爲降序。
第四部分, limit offset count,限制返回條數。
第五部分,withscores,返回值攜帶score值。
示例:
ZRANGE zset 10 5 REV BYSCORE
當添加rev選項,等價於zrevrange。
當添加byscore選項,等價於zrangebyscore。
當同時添加rev, byscore選項,等價於zrevrangebyscore
當添加bylex, 等價於zrangebylex。
當添加rev選項,等價於zrevrangebylex。
2.1.4 zrank & zrevrank
格式:
ZRANK key member
元素操作,在zset中查詢member的索引值,或者稱爲排名。
特殊說明:
當key或者member不存在時,返回nil
示例:略
rev表示降序。
2.1.5 zrandmember
格式:
ZRANDMEMBER key [count [WITHSCORES]]
元素操作,在zset中隨機返回count個member,添加withscores選項,同時返回score值。
特殊說明:
當key不存在時,返回nil
示例:略
2.1.6 zincrby
格式:
ZINCRBY key increment member
元素操作,在zset中將member對應的score增加increment。
特殊說明:
當key不存在時, 會創建新的zset,包含member元素,它的值爲0.
當member不存在時,會將它的值設置爲0.
示例:略
2.1.7 zrem
格式:
ZREM key member [member ...]
元素操作,在zset中一次性刪除多個member。
特殊說明:
當key或者member不存在時,報錯。
示例:略
2.1.8 zremrangebyXX
格式:
zremrangebyxx key start stop
元素操作,範圍型刪除。有三種,zremrangebyrank, zremrangebyscore, zremrangebylex,三種排序方式不同。Rank爲索引排序,score爲分數排序,lex按照member名稱字母排序。
當爲byrank時, start stop表示索引值
當爲score時,start stop爲score值。
當爲lex時,start stop爲member值,表示按字母排序。
特殊說明:
當key或者member不存在時,報錯。
示例:略
2.1.9 zpopmin & zpopmax & zmpop
格式:
ZPOPMIN key [count]
元素操作,在zset中由小到大依次刪除count個元素。
特殊說明:
當count不存在時,默認值爲1。
示例:略
Zpopmax由大到小,先刪除最大元素。
Zmpop,在參數中可以指定多個key,一次性刪除多個zset的count個元素。Min,max爲命令的選項。
命令名稱前綴爲b的,表示pop操作可以處於等待(block)狀態,當刪除不成功時,會處於阻塞狀態,可以指定timeout參數,含義爲等待的毫秒數。
Bzpopmin,bzpopmax, bzmpop。
2.1.10 zcard
格式:
ZCARD key
元素操作,統計zset中有多少個member。
特殊說明:
當key不存在時,返回0。
示例:略
2.1.11 zcount
格式:
zcount key min max
元素操作,統計zset中score大於min,小於max的元素個數。
示例:略
2.2 集合
2.2.1 zunion & zunionstore
格式:
ZUNION numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>] [WITHSCORES]
集合操作,計算集合之間的並集。
第一部分, zunion爲命令名稱, numkeys,爲key的個數,與後續的key參數個數保持一致。最少爲2。
第二部分,weights weight,在進行聚合函數之前,先對score進行乘法運算,score * weight,不指定時, 爲默認值1。
第三部分,aggregate sum min max,當並集有相同元素時,例如其中一個存在a,它的score爲2,另外一個也存在a,它的score值爲3時,sum爲二者相加,min返回二者的最小值,max返回二者的最大值。
第四部分,withscores,略。
示例:
ZUNION 2 zset1 zset2
帶store的區別是會將結果保存到destination中。
2.2.2 zdiff & zdiffstore
格式:
ZDIFF numkeys key [key ...] [WITHSCORES]
集合操作,計算集合之間的差集。所有的選項與zunion相同。
示例:
ZDIFF 2 zset1 zset2 WITHSCORES
2.2.3 zinter & zintercard & zinterstore
格式:
ZINTER numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>] [WITHSCORES]
集合操作,計算集合之間的交集。所有的選項與zunion相同。
示例:略。
zintercard返回交集的個數,而不是返回元素和score。