Redis Zset是有序集合,和Set集合一样也是不允许存在重复元素,不同的是Zset中每个元素都会关联一个double类型的分数,Redis正是通过分数为集合中的成员进行排序.
Zset最典型应用场景就是积分排行榜.对积分可运算,可按积分取用户名次等等操作.
Zset可以按很多维度进行操作,很容易搞混,但总体来说操作命令可以分为以下3类:
lex:按字典顺序操作,参照一下9中的zrangebylex 命令
score:按分数操作,参照一下13中的zrangebyscore命令
rank:按分数对应排名操作,参照一下4中的zrank命令
1. 向有序集合添加一个或多个元素,或者更新已存在元素的[分数]
zadd key [nx|xx] [ch] [incr] score member [score member ...]
nx:只修改已存在元素,不添加
xx:不修改已存在元素,只添加
127.0.0.1:6379> zadd key 1 m1
(integer) 1
127.0.0.1:6379> zadd key 2 m2 3 m3
(integer) 2
127.0.0.1:6379> zadd key nx 2 m1
(integer) 0
127.0.0.1:6379> zadd key xx 2 m1
(integer) 0
2. 获取有序集合的元素数量
zcard key
127.0.0.1:6379> zcard key
(integer) 3
3. 返回元素对应分数值
zscore key member
127.0.0.1:6379> zscore key m1
"2"
127.0.0.1:6379> zscore key m2
"2"
127.0.0.1:6379> zscore key m3
"3"
4. 返回有序集合中指定元素的排名,按分数值从小到大排序
zrank key member
127.0.0.1:6379> zrank key m1
(integer) 0
127.0.0.1:6379> zrank key m2
(integer) 1
127.0.0.1:6379> zrank key m3
(integer) 2
5. 返回有序集合中指定元素的排名,按分数值从大到小排序
zrevrank key member
127.0.0.1:6379> zrevrank key m3
(integer) 0
127.0.0.1:6379> zrevrank key m2
(integer) 1
127.0.0.1:6379> zrevrank key m1
(integer) 2
6. 返回索引区间内的元素,按分数从低到高顺序,相同分数按字典升序排列
zrange key start stop [withscores]
0是第一个元素,1是第二个元素,依此类推
-1是最后一个元素,-2是倒数第二个元素
127.0.0.1:6379> zrange key 0 3 withscores
1) "m1"
2) "2"
3) "m2"
4) "2"
5) "m3"
6) "3"
127.0.0.1:6379> zrange key -3 -1 withscores
1) "m1"
2) "2"
3) "m2"
4) "2"
5) "m3"
6) "3"
7. 返回指定区间内的元素,按分数从高到低顺序,相同分数按字典降序排列
0是第一个元素,1是第二个元素,依此类推
-1是最后一个元素,-2是倒数第二个元素
zrevrange key start stop [withscores]
127.0.0.1:6379> zrevrange key 0 3
1) "m3"
2) "m2"
3) "m1"
127.0.0.1:6379> zrevrange key 0 3 withscores
1) "m3"
2) "3"
3) "m2"
4) "2"
5) "m1"
6) "2"
127.0.0.1:6379> zrevrange key -3 -1 withscores
1) "m3"
2) "3"
3) "m2"
4) "2"
5) "m1"
6) "2"
8. 返回指定两个元素范围内的元素数量,按字典顺序
zlexcount key min max
其中min,max代表元素
-:第一个元素
+:最后一个元素
127.0.0.1:6379> zlexcount key - +
(integer) 3
127.0.0.1:6379> zlexcount key [m1 [m3
(integer) 3
9. 返回有序集合中指定元素区间的元素,按字典顺序
zrangebylex key min max [limit offset count]
其中min,max代表元素
127.0.0.1:6379> zrangebylex key - +
1) "m1"
2) "m2"
3) "m3"
127.0.0.1:6379> zrangebylex key - + limit 1 1
1) "m2"
127.0.0.1:6379> zrangebylex key [m1 [m3
1) "m1"
2) "m2"
3) "m3"
10. 返回有序集中指定分数区间内的元素,按分数高到低排序
zrevrangebyscore key max min [withscores]
+inf表示无穷大,-inf表示负无穷大
127.0.0.1:6379> zrevrangebyscore key +inf -inf
1) "m2"
2) "m3"
3) "m1"
127.0.0.1:6379> zrevrangebyscore key +inf -inf withscores
1) "m3"
2) "3"
3) "m2"
4) "2"
5) "m1"
6) "2"
127.0.0.1:6379> zrevrangebyscore key 2 0 withscores
1) "m2"
2) "2"
3) "m1"
4) "2"
127.0.0.1:6379> zrevrangebyscore key (2 0
(empty list or set)
11. 对指定元素分数进行加分操作
zincrby key increment member
127.0.0.1:6379> zincrby key 2 m2
"4"
127.0.0.1:6379> zscore key m2
"4"
12. 计算在有序集合中指定分数区间的元素数量
zcount key min max
127.0.0.1:6379> zcount key 0 4
(integer) 3
13. 指定分数区间内的元素
zrangebyscore key min max [withscores] [limit]
127.0.0.1:6379> zrangebyscore key 0 4
1) "m1"
2) "m3"
3) "m2"
127.0.0.1:6379> zrangebyscore key 0 4 withscores
1) "m1"
2) "2"
3) "m3"
4) "3"
5) "m2"
6) "4"
127.0.0.1:6379> zrangebyscore key 0 4 withscores limit 1 1
1) "m3"
2) "3"
127.0.0.1:6379>
14. 移除有序集合中的一个或多个元素
zrem key member [member ...]
127.0.0.1:6379> zadd key 1 m10
(integer) 1
127.0.0.1:6379> zscore key m10
"1"
127.0.0.1:6379> zrem key m10
(integer) 1
127.0.0.1:6379> zscore key m10
(nil)
15. 移除有序集合中指定的字典区间的所有元素,按字典顺序区间
zremrangebylex key min max
127.0.0.1:6379> zrange key 0 3 withscores
(empty list or set)
127.0.0.1:6379> zadd key 1 m1
(integer) 1
127.0.0.1:6379> zadd key 2 m2 3 m3
(integer) 2
127.0.0.1:6379>
127.0.0.1:6379> zrange key 0 3 withscores
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m3"
6) "3"
127.0.0.1:6379> zremrangebylex key [m1 [m2
(integer) 2
127.0.0.1:6379> zrange key 0 3 withscores
1) "m3"
2) "3"
127.0.0.1:6379>
16. 移除排名区间的所有元素,按分数从高到低排序所对应排名
zremrangebyrank key start stop
127.0.0.1:6379> zadd key 1 m10 2 m11 2 m12 3 m13
(integer) 4
127.0.0.1:6379> zrevrangebyscore key +inf -inf
1) "m2"
2) "m3"
3) "m13"
4) "m12"
5) "m11"
6) "m1"
7) "m10"
127.0.0.1:6379> zremrangebyrank key 5 7
(integer) 2
127.0.0.1:6379> zrevrangebyscore key +inf -inf
1) "m13"
2) "m12"
3) "m11"
4) "m1"
5) "m10"
127.0.0.1:6379>
17. 移除指定分数区间的所有元素
zremrangebyscore key min max
127.0.0.1:6379> zrevrangebyscore key +inf -inf withscores
1) "m13"
2) "3"
3) "m12"
4) "2"
5) "m11"
6) "2"
7) "m1"
8) "2"
9) "m10"
10) "1"
127.0.0.1:6379> zremrangebyscore key 2 3
(integer) 4
127.0.0.1:6379> zrevrangebyscore key +inf -inf withscores
1) "m10"
2) "1"
了解了以上这些命令基本可以搞定你80%的工作了!~