一、概述
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>