Redis学习(五)sorted-set有序集合

一、概述

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

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

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

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

二、常用命令

    示例:zadd set score val ... scoren valn

    用法:用于添加一个或多个set成员。

                如果set不存在,则新建一个set。

                如果set存在,但是不是set类型,则返回error。

                如果set存在,内部有成员,则更会更新成员,重新插入set。不存在的成员将会新增

    返回:返回新增的成员个数。不包括更新的成员

    示例:zcard set 

    用法:用于计算集合中元素的数量。

    返回:返回成员基数。set不存在返回0。

    示例:zcount set min max

    用法:用于计算有序集合中指定分数区间的成员数量。

    返回:返回分数在min max区间内的基数个数

    示例:zincrby set increment member

    用法:对有序集合中指定成员的分数加上增量 increment 可以通过传递一个负数值 increment ,让分数减去相应的值,比如                        ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。

                当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。

                当 key 不是有序集类型时,返回一个错误。

                分数值可以是整数值或双精度浮点数。

    返回:返回执行命令之后的新的分数值

    示例:zrange set start end [withscores]

    用法:返回有序集合中指定区间内的成员。

               其中成员的位置按分数值递增(从小到大)来排序。

               具有相同分数值的成员按字典序(lexicographical order )来排列。

               如果你需要成员按值递减(从大到小)来排列,请使用 zrevrange 命令。

              下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。

              你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

    返回:指定区间内,带有分数值(可选)的有序集成员的列表。

    示例:zinterstore set min max

    用法:计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到                          destination 。默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。

    返回:保存到目标结果集的的成员数量。

127.0.0.1:6379> zadd aset 1 k 2 e 3 l 4 p
(integer) 4
127.0.0.1:6379> zrange aset 0 -1
1) "k"
2) "e"
3) "l"
4) "p"
127.0.0.1:6379> zlexcount aset - +
(integer) 4
127.0.0.1:6379> zlexcount aset [k [e
(integer) 0
127.0.0.1:6379> zlexcount aset [1 [3
(integer) 0
127.0.0.1:6379> zlexcount aset [k [p
(integer) 4
127.0.0.1:6379> zlexcount aset [k [l
(integer) 3
127.0.0.1:6379>

    示例:zrangebylex set min max

    用法:通过字典区间返回有序集合的成员。

    返回:指定区间内的元素列表。

127.0.0.1:6379> zrange aset 0 -1 withscores
1) "k"
2) "1"
3) "e"
4) "2"
5) "l"
6) "3"
7) "p"
8) "4"
127.0.0.1:6379> zrangebylex aset - [p
1) "k"
2) "e"
3) "l"
4) "p"
127.0.0.1:6379> zrangebylex aset - [l
1) "k"
2) "e"
3) "l"
127.0.0.1:6379>

   

    示例:zremrangebyrank set start stop

    用法:用于移除有序集中,指定排名(rank)区间内的所有成员。

    返回:被移除成员的数量

127.0.0.1:6379> zrange aset 0 -1 withscores
1) "k"
2) "1"
3) "e"
4) "2"
5) "l"
6) "3"
7) "p"
8) "4"
127.0.0.1:6379> zremrangebyrank aset 2 3        移除分数在2-3区间内的数据
(integer) 2
127.0.0.1:6379> zrange aset 0 -1
1) "k"
2) "e"
127.0.0.1:6379>

    示例:zlexcount  set min max

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

    返回:指定区间内的成员数量。

    示例:zrangebyscore set start stop [withscores]

    用法:返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。具有相同分数值的成员按字                    典序来排列(该属性是有序集提供的,不需要额外的计算)。

                默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小                  于或大于)。

    返回:指定区间内,带有分数值(可选)的有序集成员的列表。

127.0.0.1:6379> zrange garde 0 -1 withscores    所有的成员以及分数
 1) "judi"
 2) "43"
 3) "wangwu"
 4) "69"
 5) "mark"
 6) "82"
 7) "jack"
 8) "94"
 9) "lisi"
10) "98"
11) "zhangsan"
12) "100"
127.0.0.1:6379> zrangebyscore garde 66 100 withscores       66-100分数范围内的成员
 1) "wangwu"
 2) "69"
 3) "mark"
 4) "82"
 5) "jack"
 6) "94"
 7) "lisi"
 8) "98"
 9) "zhangsan"
10) "100"
127.0.0.1:6379>

    示例:zrevrange set start stop [withscores]

    用法:从大到小排序指定区间的成员

    返回:指定区间内,带有分数值(可选)的有序集成员的列表。

127.0.0.1:6379> zrevrange garde 0 -1 withscores
 1) "zhangsan"
 2) "100"
 3) "lisi"
 4) "98"
 5) "jack"
 6) "94"
 7) "mark"
 8) "82"
 9) "wangwu"
10) "69"
11) "judi"
12) "43"

    示例:zscore set member

    用法:返回指定成员的分数值

    返回:成员的分数值,以字符串形式表示。

    示例:zunionstore  dest  num key1.. keyn

    用法:计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到                          destination 。默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和 

    返回:保存到dest的成员数量

127.0.0.1:6379> zrange garde 0 -1 withscores                测试set1
 1) "judi"
 2) "43"
 3) "wangwu"
 4) "69"
 5) "mark"
 6) "82"
 7) "jack"
 8) "94"
 9) "lisi"
10) "98"
11) "zhangsan"
12) "100"
127.0.0.1:6379> zadd gader1 66 zhangsan 67 lisi            测试set2
(integer) 2
127.0.0.1:6379> zunionstore destunio 2 garde gader1        计算并集
(integer) 6
127.0.0.1:6379> zrevrange destunio 0 -1 withscores         并集内容
 1) "zhangsan"
 2) "166"
 3) "lisi"
 4) "165"
 5) "jack"
 6) "94"
 7) "mark"
 8) "82"
 9) "wangwu"
10) "69"
11) "judi"
12) "43"
127.0.0.1:6379>
发布了22 篇原创文章 · 获赞 9 · 访问量 8815

猜你喜欢

转载自blog.csdn.net/ljm_c_bok/article/details/104921134