引言
sort set是元素帶有score,並且按score排序的有序集合
zset的命令中往往是對於三個維度去操作:score,按score排序後的下標,score相同情況下的元素字典排序後的值
這三個維度的命令的格式往往分別是:byscore、byrank、bylex
一共有以下命令需要熟悉,任務有點艱鉅哦
BZPOPMAX
BZPOPMIN
ZADD
ZCARD
ZCOUNT
ZINCRBY
ZINTERSTORE
ZLEXCOUNT
ZPOPMAX
ZPOPMIN
ZRANGE
ZRANGEBYLEX
ZRANGEBYSCORE
ZRANK
ZREM
ZREMRANGEBYLEX
ZREMRANGEBYRANK
ZREMRANGEBYSCORE
ZREVRANGE
ZREVRANGEBYLEX
ZREVRANGEBYSCORE
ZREVRANK
ZSCAN
ZSCORE
ZUNIONSTORE
挨個介紹
向zset添加元素
sadd key [nx | xx] [ch] [incre] score member [score member]
- nx 只有元素不存在纔會添加
- xx 只有元素存在纔會更新score
- ch 看不懂
- incr 有這個選項就表示要增加member的score
獲取zset的元素總數
zcard key
求得分數在min和max之間的元素個數。 統計值包括等於min和max值score的元素
zcount key min max
對一個member值的score增加increment
zincrby key increment member
獲取分數最大的元素
zpopmax key
獲取分數最小的元素
zpopmin key
對多個zset集合求並集把結果存儲到destination集合中。 numkeys是爲了只要有幾個key,與後面的weight參數作爲區分。
weight參數可以給每個集合指定一個乘法因子,score值在傳遞給聚合函數之前都要先乘以該因子。
sum、min、max是聚合函數,相同元素之間的聚合方法。
zunionstore destination numkeys key[key ...] [weight weight] [sum|min|max]
演示
redis> ZADD zset1 1 "one"
(integer) 1
redis> ZADD zset1 2 "two"
(integer) 1
redis> ZADD zset2 1 "one"
(integer) 1
redis> ZADD zset2 2 "two"
(integer) 1
redis> ZADD zset2 3 "three"
(integer) 1
redis> ZUNIONSTORE out 2 zset1 zset2 WEIGHTS 2 3
(integer) 3
redis> ZRANGE out 0 -1 WITHSCORES
1) "one"
2) "5"
3) "three"
4) "9"
5) "two"
6) "10"
redis>
對多個zset集合求交集把結果存儲到destination集合中。其他參數與zunionstore命令的一樣
zinterstore destination numkeys key[key …] [weight weight] [sum|min|max]
用來計算zset集合中指定成員之間的成員數量
zlenxcount key min max
計算成員之間成員數量
redis> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
redis> ZADD myzset 0 f 0 g
(integer) 2
redis> ZLEXCOUNT myzset - +
(integer) 7
redis> ZLEXCOUNT myzset [b [f
(integer) 5
redis>
計算某個成員之前或者之後的成員數量
redis> ZADD myzset 1 a 2 b 3 c 4 d 5 e 6 f 7 g
(integer) 7
redis> zrange myzset 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
redis> ZLEXCOUNT myzset - +
(integer) 7
redis> ZLEXCOUNT myzset [c +
(integer) 5
redis> ZLEXCOUNT myzset - [c
(integer) 3
redis>
獲取元素的score值
zscore key member
移除多個元素
zrem key member [member]
獲取member元素的排名,從小到大,第一名是0
zrank key member
與zrank的排序方式相反,從大到小
zrevrank key member
複合命令
zrange
與其他命令類似,獲取[start stop]範圍內的元素
withscores會返回元素和元素的分數
zrange key start stop [withscores]
zrangebylex
獲取成員之間的成員,按成員字典正序排序,分數必須相同。
limit offset count是用來分頁查詢的
[表示閉區間
(表示開區間
-表示最小
+表示最大
zrangebylex key min max [limit offset count]
redis> zadd zset 0 a 0 aa 0 abc 0 apple 0 b 0 c 0 d 0 d1 0 dd 0 dobble 0 z 0 z1
(integer) 12
redis> ZRANGEBYLEX zset [aa [c
1) "aa"
2) "abc"
3) "apple"
4) "b"
5) "c"
zrangebyscore
獲取指定分數之間的成功,閉區間。
zrangebyscore key start stop [withscores] [limit offset count]
默認分數都是閉區間 可以在分數前加(表示開區間
+inf 和-inf表示返回所有
WITHSCORES和分頁參數與之前類似
redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZRANGEBYSCORE myzset -inf +inf
1) "one"
2) "two"
3) "three"
redis> ZRANGEBYSCORE myzset 1 2
1) "one"
2) "two"
redis> ZRANGEBYSCORE myzset (1 2
1) "two"
redis> ZRANGEBYSCORE myzset (1 (2
(empty list or set)
redis>
zremrangebylex
刪除指定成員之間的成員
[表示閉區間
(表示開區間
-表示最小
+表示最大
zremrangebylex key min max
zremrangebyrank
刪除指定排名區間的元素
zremrangebyrank key start stop
zremangebyscore
刪除指定分數之間的元素
zrevrange
按score值遞減排序,獲取指定排序範圍內的元素
zrevrange key start stop [withscores]
zrevrangebylex
score相同情況下的元素字典逆序排序後的值範圍
返回範圍內的元素
zrevrangebylex key max min [LIMIT offset count]
zrevrangebyscore
sscore逆序排序後的範圍
返回範圍內的元素
zrevrangebyscore key max min [LIMIT offset count]
zscan
與scan類似
增量式的遍歷zset內的值