Redis教程08(ZSet有序集合介绍)

举报
波波烤鸭 发表于 2022/03/30 02:30:04 2022/03/30
【摘要】 上文中介绍了Redis中的Set集合,Set集合是无序的不可重复的。而我们本文要介绍的ZSet其实是在Set的基础上绑定了一个score来实现集合数据按照score排序的集合。 Redis...

上文中介绍了Redis中的Set集合,Set集合是无序的不可重复的。而我们本文要介绍的ZSet其实是在Set的基础上绑定了一个score来实现集合数据按照score排序的集合。


Redis教程07(Set集合介绍)


有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。

命令 说明
zadd 向有序集合中添加一个或多个 分数/元素对
zscore 获取有序集合中元素对应的分数
zrange 获取集合中的元素,如果加上withscores则会连同分数一并返回
zrevrange 和zrange类似,只是将结果倒序了
zcard 返回集合中元素的个数
zcount 统计集合中分数在min和max之间的元素个数
zrangebyscore 可以根据score范围查找元素
zrank 获取元素在集合中的排名,从小到大,最小的是0
zrevrank 获取元素在集合中的排序,从大到小
zincrby 给元素增加分数,如果不存在就新创建元素,并赋予对应的分数
zinterstore 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
zrem 从集合中弹出一个元素
zlexcount 计算有序集合中指定字典区间内成员数量
zrangebylex 获取指定区间的元素,分数必须相同

ZAdd

向有序集合中添加一个或者多个元素(分数/元素),如果元素已经存在,则更新该元素的分数,并调整到对应的位置。按分数从小到大排列

127.0.0.1:6379> zadd student 60 a1 70 a2 80 a3 90 a4
(integer) 4

  
 
  • 1
  • 2

ZScore

获取有序集合中元素对应的分数值

127.0.0.1:6379> zscore student a1
"60"
127.0.0.1:6379> zscore student a4
"90"

  
 
  • 1
  • 2
  • 3
  • 4

ZRange

获取集合中指定的元素信息,如果加上withscores参数则会连同分数一并返回

127.0.0.1:6379> zrange student 0 -1
1) "a1"
2) "a2"
3) "a3"
4) "a4"
127.0.0.1:6379> zrange student 0 -1 withscores
1) "a1"
2) "60"
3) "a2"
4) "70"
5) "a3"
6) "80"
7) "a4"
8) "90"

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

ZRevRange

和zrange命令类似,只是结果倒序显示

127.0.0.1:6379> zrevrange student 0 3
1) "a4"
2) "a3"
3) "a2"
4) "a1"
127.0.0.1:6379> zrevrange student 0 3 withscores
1) "a4"
2) "90"
3) "a3"
4) "80"
5) "a2"
6) "70"
7) "a1"
8) "60"

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

ZCard

返回集合中元素的个数

127.0.0.1:6379> zcard student
(integer) 4

  
 
  • 1
  • 2

ZCount

统计集合中元素的分数在min和max之间的个数,如果不需要保持min或者max,在其前面加(即可,如下

127.0.0.1:6379> zcount student 60 90
(integer) 4
127.0.0.1:6379> zcount student 60 (90
(integer) 3
127.0.0.1:6379> zcount student (60 90
(integer) 3
127.0.0.1:6379> zcount student (60 (90
(integer) 2

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

ZRangeByScore

可以根据score范围来查找集合中的元素,加上withscores也可以一并查询出对应的分数。

127.0.0.1:6379> zrangebyscore student 60 90
1) "a1"
2) "a2"
3) "a3"
4) "a4"
127.0.0.1:6379> zrangebyscore student 60 90 withscores
1) "a1"
2) "60"
3) "a2"
4) "70"
5) "a3"
6) "80"
7) "a4"
8) "90"
127.0.0.1:6379> zrangebyscore student (60 (90 withscores
1) "a2"
2) "70"
3) "a3"
4) "80"

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

ZRank

获取元素在集合中的排名,从小到大排序,最小的排名是0,不存在的返回 nil

127.0.0.1:6379> zrank student a3
(integer) 2
127.0.0.1:6379> zrank student a66
(nil)
127.0.0.1:6379> zrank student a1
(integer) 0

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

ZRevRank

获取元素在集合中的排名,从大到小排名,和ZRank命令刚好相反

127.0.0.1:6379> zrevrank student a3
(integer) 1
127.0.0.1:6379> zrevrank student a1
(integer) 3

  
 
  • 1
  • 2
  • 3
  • 4

ZIncrBy

给集合中的元素增加分数,如果元素不存在则新建元素,并设置分数初始为0然后在增加设置的分数。

127.0.0.1:6379> zrange student 0 -1 withscores
1) "a1"
2) "60"
3) "a2"
4) "70"
5) "a3"
6) "80"
7) "a4"
8) "90"
127.0.0.1:6379> zincrby student 5 a1
"65"
127.0.0.1:6379> zrange student 0 -1 withscores
1) "a1"
2) "65"
3) "a2"
4) "70"
5) "a3"
6) "80"
7) "a4"
8) "90"
127.0.0.1:6379> zincrby student 5 aa
"5"
127.0.0.1:6379> zrange student 0 -1 withscores
 1) "aa"
 2) "5"
 3) "a1"
 4) "65"
 5) "a2"
 6) "70"
 7) "a3"
 8) "80"
 9) "a4"
10) "90"

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

ZInterStore

计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

127.0.0.1:6379> zadd s1 2 a1 3 a2 4 a3
(integer) 3
127.0.0.1:6379> zadd s2 5 a1 6 a4 7 a3
(integer) 3
127.0.0.1:6379> zinterstore s3 2 s1 s2
(integer) 2
127.0.0.1:6379> zrange s3 0 -1 withscores
1) "a1"
2) "7"
3) "a3"
4) "11"

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

还可以在命令后跟上权重值,score会乘以该权重值。

127.0.0.1:6379> zinterstore s5 2 s1 s2 weights 3 1
(integer) 2
127.0.0.1:6379> zrange s5 0 -1 withscores
1) "a1"
2) "11"
3) "a3"
4) "19"

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

ZRem

从集合中弹出一个元素

127.0.0.1:6379> zrange s5 0 -1 withscores
1) "a1"
2) "11"
3) "a3"
4) "19"
127.0.0.1:6379> zrem s5 a1
(integer) 1
127.0.0.1:6379> zrange s5 0 -1 withscores
1) "a3"
2) "19"

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

ZLexCount

计算有序集合中指定字典区间内成员数量

127.0.0.1:6379> zadd myzset 0 a 0 b 0 c 0 d 0 e 0 f
(integer) 6
127.0.0.1:6379> zlexcount myzset - +
(integer) 6
127.0.0.1:6379> zlexcount myzset [b [e
(integer) 4

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注意 -+表示最小值和最大值,如果我们需要通过元素查找的话需要加[。

ZRangeByLex

获取集合中指定成员区间的元素

127.0.0.1:6379> zlexcount myzset1 - +
(integer) 5
127.0.0.1:6379> zlexcount myzset1 [b [e
(integer) 4
127.0.0.1:6379> zrangebylex myzset [b [e
1) "b"
2) "c"
3) "d"
4) "e"

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

~好了本文到此为止
更多资料欢迎参考官网手册

文章来源: dpb-bobokaoya-sm.blog.csdn.net,作者:波波烤鸭,版权归原作者所有,如需转载,请联系作者。

原文链接:dpb-bobokaoya-sm.blog.csdn.net/article/details/87096608

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。