美文网首页
Redis 数据类型之有序集合(sorted set)

Redis 数据类型之有序集合(sorted set)

作者: 贪睡的企鹅 | 来源:发表于2020-10-22 22:04 被阅读0次

Redis 有序集合(sorted set)

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1

Redis 有序集合命令

向有序集合添加一个或多个成员
-------------------ZADD-------------------
127.0.0.1:6379> flushdb #清理当前数据库
OK
127.0.0.1:6379> ZADD myzset 1 m1   #向有序集合myzset中添加成员m1 score=1
(integer) 1
127.0.0.1:6379> ZADD myzset 2 m2 3 m3  #向有序集合myzset中添加成员m3 score=3,m2 score=2
(integer) 2
127.0.0.1:6379> ZADD myzset 4 m5    #向有序集合myzset中添加成员m5 score=4
(integer) 1
127.0.0.1:6379> ZADD myzset 5 m5    #向有序集合myzset中添加成员m5已经存在更新分数 score=5
(integer) 0
127.0.0.1:6379> ZRANGE myzset 0 -1  #通过索引区间返回有序集合指定区间内的成员(0,-1表示查询所有成员)
1) "m1"
2) "m2"
3) "m3"
4) "m5"
-------------------ZADD-------------------
通过索引区间返回有序集合指定区间内的成员(索引按照正序【分数小到大】排序)
-------------------ZRANGE-------------------
127.0.0.1:6379> ZRANGE myzset 0 -1 通过索引区间返回有序集合指定区间内的成员(索引按照正序【分数小到大】排序)(0,-1表示查询所有成员)
1) "m1"
2) "m2"
3) "m3"
4) "m5"
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES  # 通过索引区间返回有序集合指定区间内的成员(索引按照正序【分数小到大】排序)并显示分数(0,-1表示查询所有成员)
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m3"
6) "3"
7) "m5"
8) "5"
127.0.0.1:6379> ZRANGE myzset 0  1  #获取[0<=索引<=1] 区间内的成员
1) "m1"
2) "m2"
127.0.0.1:6379> ZRANGE myzset 0  1 WITHSCORES 获取[0<=索引<=1] 区间内的成员并显示分数
1) "m1"
2) "1"
3) "m2"
4) "2"
-------------------ZRANGE-------------------
返回有序集合中指定成员的索引【正序排名】
-------------------ZRANK-------------------
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES  #通过索引区间返回有序集合指定区间内的成员并显示分数(0,-1表示查询所有成员)
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m3"
6) "3"
7) "m5"
8) "5"
127.0.0.1:6379> ZRANK myzset m1  #返回有序集合中指定成员的索引(正序)
(integer) 0
127.0.0.1:6379> ZRANK myzset m3  #返回有序集合中指定成员的索引(正序)
(integer) 1
127.0.0.1:6379> ZRANK myzset m3  #返回有序集合中指定成员的索引(正序)
(integer) 3
127.0.0.1:6379> ZRANK myzset m5  #返回有序集合中指定成员的索引(正序)
(integer) 5
-------------------ZRANK-------------------
通过索引区间返回有序集合指定区间内的成员(索引按照逆序【分数大到小】排序)
127.0.0.1:6379> ZREVRANGE myzset 0 -1   通过索引区间返回有序集合指定区间内的成员(索引按照逆序【分数大到小】)(0,-1表示查询所有成员)
1) "m5"
2) "m3"
3) "m2"
4) "m1"
127.0.0.1:6379> ZREVRANGE myzset 0 -1 WITHSCORES  # 通过索引区间返回有序集合指定区间内的成员(索引按照逆序【分数大到小】)并显示分数(0,-1表示查询所有成员)
1) "m5"
2) "5"
3) "m3"
4) "3"
5) "m2"
6) "2"
7) "m1"
8) "1"
返回有序集合中指定成员的索引【逆序排名】
127.0.0.1:6379> ZREVRANGE myzset 0 -1 WITHSCORES  
1) "m5"
2) "5"
3) "m3"
4) "3"
5) "m2"
6) "2"
7) "m1"
8) "1"
127.0.0.1:6379> ZREVRANK myzset m5 #返回有序集合中指定成员的索引(逆序)
(integer) 0
127.0.0.1:6379> ZREVRANK myzset m3 #返回有序集合中指定成员的索引(逆序)
(integer) 1
127.0.0.1:6379> ZREVRANK myzset m2 #返回有序集合中指定成员的索引(逆序)
(integer) 2
127.0.0.1:6379> ZREVRANK myzset m1 #返回有序集合中指定成员的索引(逆序)
(integer) 3
通过分区间返回有序集合指定区间内的成员(按照正序【分数小到大】排序)
-------------------ZRANGEBYSCORE-------------------
127.0.0.1:6379> ZRANGEBYSCORE myzset -inf +inf #通过分区间返回有序集合指定区间内的成员(按照正序【分数小到大】排序)(-inf +inf表示查询所有成员)
1) "m1"
2) "m2"
3) "m3"
4) "m5"
127.0.0.1:6379> ZRANGEBYSCORE myzset -inf +inf WITHSCORES  #通过分区间返回有序集合指定区间内的成员(按照正序【分数小到大】排序)并显示分数(-inf +inf表示查询所有成员)
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m3"
6) "3"
7) "m5"
8) "5"
127.0.0.1:6379> ZRANGEBYSCORE myzset  (1  (3   #获取[0 < score < 3] 区间内的成员
1) "m2"
127.0.0.1:6379> ZRANGEBYSCORE myzset  (1  (3  WITHSCORES   #获取[0 < score < 3] 区间内的成员并显示分数
1) "m2"
2) "2"
127.0.0.1:6379> ZRANGEBYSCORE myzset  1  3    #获取[0 <= score <= 3] 区间内的成员
1) "m1"
2) "m2"
3) "m3"
127.0.0.1:6379> ZRANGEBYSCORE myzset  1  3 WITHSCORES  #获取[0 <= score <= 3] 区间内的成员并显示分数
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m3"
6) "3"
-------------------ZRANGEBYSCORE-------------------
通过分区间返回有序集合指定区间内的成员(按照逆序【分数大到小】排序)

127.0.0.1:6379> ZREVRANGEBYSCORE myzset +inf -inf  # 通过分区间返回有序集合指定区间内的成员(按照逆序【分数大到小】排序)(+inf -inf表示查询所有成员)
1) "m5"
2) "m3"
3) "m2"
4) "m1"
127.0.0.1:6379> ZREVRANGEBYSCORE myzset +inf -inf WITHSCORES #通过分区间返回有序集合指定区间内的成员(按照逆序【分数大到小】排序)并显示分数(-inf +inf表示查询所有成员)
1) "m5"
2) "5"
3) "m3"
4) "3"
5) "m2"
6) "2"
7) "m1"
8) "1"
返回有序集合中指定成员的分数
-------------------ZSCORE-------------------
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m3"
6) "3"
7) "m5"
8) "5"
127.0.0.1:6379> ZSCORE myzset m1
"1"
127.0.0.1:6379> ZSCORE myzset m2
"2"
127.0.0.1:6379> ZSCORE myzset m3
"3"
127.0.0.1:6379> ZSCORE myzset m5
"5"
-------------------ZSCORE-------------------
指定成员的分数加上增量 increment
-------------------ZINCRBY-------------------
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES   #通过索引区间返回有序集合指定区间内的成员(0,-1表示查询所有成员)
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m3"
6) "3"
7) "m5"
8) "5"
127.0.0.1:6379> ZINCRBY myzset 3 m3  # 指定成员上增量分数 +3
"6"
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES  # 有序队列中顺序发生改变
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m5"
6) "5"
7) "m3"
8) "6"
-------------------ZINCRBY-------------------
查询有序集合数量
-------------------ZCARD--ZCOUNT-------------------
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES   #通过索引区间返回有序集合指定区间内的成员(0,-1表示查询所有成员)
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m3"
6) "3"
7) "m5"
8) "5"
127.0.0.1:6379> ZCARD myzset   #获取有序集合的所有成员数量
(integer) 4
127.0.0.1:6379> ZCOUNT myzset 1 3  #计算在有序集合中指定区间分数的成员数量
(integer) 3
-------------------ZCARD--ZCOUNT-------------------
移除有序集合中成员
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m3"
6) "3"
7) "m5"
8) "5"
127.0.0.1:6379> ZREMRANGEBYRANK myzset 0 0  #移除有序集合中给定的排名区间的所有成员(正序)
(integer) 1
127.0.0.1:6379> ZREMRANGEBYSCORE myzset 5 5 #移除有序集合中给定的分数区间的所有成员(正序)
(integer) 1
127.0.0.1:6379> ZREM myzset m2  #移除有序集合中的一个或多个成员
(integer) 1
127.0.0.1:6379> ZRANGE myzset 0 -1 
1) "m3"
交集
127.0.0.1:6379> ZADD mid_test 70 "Li Lei"
(integer) 1
127.0.0.1:6379> ZADD mid_test 70 "Han Meimei"
(integer) 1
127.0.0.1:6379> ZADD mid_test 99.5 "Tom"
(integer) 1

127.0.0.1:6379> ZADD fin_test 88 "Li Lei"
(integer) 1
127.0.0.1:6379> ZADD fin_test 75 "Han Meimei"
(integer) 1
127.0.0.1:6379> ZADD fin_test 99.5 "Tom"
(integer) 1

127.0.0.1:6379> ZINTERSTORE sum_point 2 mid_test fin_test
(integer) 3

127.0.0.1:6379> ZRANGE sum_point 0 -1 WITHSCORES     
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"
并集
127.0.0.1:6379> ZRANGE programmer 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"

127.0.0.1:6379> ZRANGE manager 0 -1 WITHSCORES
1) "herry"
2) "2000"
3) "mary"
4) "3500"
5) "bob"
6) "4000"

127.0.0.1:6379> ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3   # 公司决定加薪。。。除了程序员。。。
(integer) 6

127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
7) "herry"
8) "6000"
9) "mary"
10) "10500"
11) "bob"
12) "12000"

相关文章

网友评论

      本文标题:Redis 数据类型之有序集合(sorted set)

      本文链接:https://www.haomeiwen.com/subject/dyxemktx.html