Sort Set類型的命令

引言

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內的值

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