前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Redis Zset有序集合

Redis Zset有序集合

作者头像
一个架构师
发布2022-06-20 19:45:23
发布2022-06-20 19:45:23
32900
代码可运行
举报
运行总次数:0
代码可运行

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:不修改已存在元素,只添加

代码语言:javascript
代码运行次数:0
复制
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

代码语言:javascript
代码运行次数:0
复制
127.0.0.1:6379> zcard key
(integer) 3

3. 返回元素对应分数值

zscore key member

代码语言:javascript
代码运行次数:0
复制
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

代码语言:javascript
代码运行次数:0
复制
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

代码语言:javascript
代码运行次数:0
复制
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]

代码语言:javascript
代码运行次数:0
复制
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]

代码语言:javascript
代码运行次数:0
复制
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代表元素

-:第一个元素

+:最后一个元素

代码语言:javascript
代码运行次数:0
复制
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代表元素

代码语言:javascript
代码运行次数:0
复制
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表示负无穷大

代码语言:javascript
代码运行次数:0
复制
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

代码语言:javascript
代码运行次数:0
复制
127.0.0.1:6379> zincrby key 2 m2
"4"
127.0.0.1:6379> zscore key m2
"4"

12. 计算在有序集合中指定分数区间的元素数量

zcount key min max

代码语言:javascript
代码运行次数:0
复制
127.0.0.1:6379> zcount key 0 4
(integer) 3

13. 指定分数区间内的元素

zrangebyscore key min max [withscores] [limit]

代码语言:javascript
代码运行次数:0
复制
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 ...]

代码语言:javascript
代码运行次数:0
复制
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

代码语言:javascript
代码运行次数:0
复制
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

代码语言:javascript
代码运行次数:0
复制
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

代码语言:javascript
代码运行次数:0
复制
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%的工作了!~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从码农的全世界路过 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档