redis 数据类型之zset
zset简介
有序集合和集合一样,也是string类型元素的集合,且不允许重复的成员。不同的是每一个元素都会关联一个double类型的分数。redis正式通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)是可以相同的。集合是通过哈希表是实现的,所以添加,删除,查找的复杂度都是O(1).集合中的最大成员数为2^32-1 (4294967295,每个集合可存储40多亿个成员)。
命令集合
zadd
ZADD key score1 member1 [score2 member2]
注意:在redis2.4之前,zadd一次只能添加一个元素。
zadd 命令用于将一个或多个成员元素及其分数值加入到有序集合中。如果当某一个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。分数值可以是整数值或双精度浮点数。
如果有序集合key不存在,则会创建一个空的有序集并执行zadd命令操作。当key存在但是不是有序集类型时,返回一个错误。
1 | 127.0.0.1:6379> zadd chengji 98 zhangsan |
zcard
ZCARD key
zcard 命令用于计算集合中元素的数量。
1 | 127.0.0.1:6379> zcard chengji |
zcount
ZCOUNT key min max
zcount 命令用于计算有序集合中指定分数区间的成员数量。
1 | 127.0.0.1:6379> zcount chengji 97 99 |
zincrby
ZINCRBY key increment member
zincrby 命令对有序集合中指定成员的分数加上增量increment。可以通过传递一个负数值increment。让分数减去相应的数值。
- 当key不存在,或者分数不是key的成员时。zincrby key increment member 等同于 zadd key increment member.
- 当key不是有序集合类型是,返回一个错误。
分数值可以是整数值或是双精度浮点值。
1 | 127.0.0.1:6379> zincrby chengji 2 lisi |
zlexcount
ZLEXCOUNT key min max
zlexcount 命令在计算有序集合中指定字典区间内成员数量。
说明:
- 成员名称前需要加
[
符号作为开头,[
符号与成员之间不能有空格。 - 可以使用
-
和+
表示得分最小值和最大值 - min 和 max 不能反,max放前面min放后面会导致返回结果为0.
- 计算成员之间的成员数量时,参数min和max的位置也计算在内。
- min和max参数的含义与zrangebylex命令所描述的相同。
返回值:
有序集合中成员名称 min
和 max
之间的成员数量;integer类型。
1 | 127.0.0.1:6379> zlexcount chengji - + |
zrange
ZRANGE key start stop [WITHSCORES]
zrange 返回有序集中,指定区间内的成员。其中成员的位置按分数值递增(从小到大)来排序。具有相同分数值的成员按字段序(lexicographical order)来排列。
如果你需要成员按值递减(从大到小)来排列,请使用 zrevrange
命令。
下标参数start
和 stop
都以0 为底,也就是说,以0 表示有序集第一个成员,以1表示有序集第二个成员,以此类推。你也可以使用负数下标,以-1表示最后一个成员,-2 表示倒数第二个成员,以此类推。
1 | 127.0.0.1:6379> zrange chengji 0 -1 |
从大到小:
1 | 127.0.0.1:6379> zrevrange chengji 0 -1 withscores |
zrangebylex
ZRANGEBYLEX key min max [LIMIT offset count]
zrangebylex 通过字典区间返回有序集合的成员。(安装字典顺序排列)
1 | 127.0.0.1:6379> zrangebylex chengji - [c |
zrangebyscore
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
min 和 max 可以使用 -inf 和 +inf,这样一来,你就可以在不知道有序集的最低和最高score值的情况下,使用zrangebyscore 命令。
zrangebyscore 返回有序集合中指定分数区别的成员列表。有序集成员按分数值递增(从小到大)次序排列。
具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。默认情况下,区间的取值使用闭区间(小于等于或大于等于),你也可以通过给参数前增加(符号来使用可选的开区间(小于或大于))。
1 | 127.0.0.1:6379> zrangebyscore chengji -inf +inf withscores |
zrank
zrank 返回有序集合中指定成员的排名。其中有序集合成员按分数值递增顺序排序。
1 | 127.0.0.1:6379> zrank chengji c |
zrevrange
ZREVRANGE key start stop [WITHSCORES]
zrevrange 命令返回有序集中,指定区间内的成员。其中成员的位置按分数值递减(从大到小)来排列。
具有相同分数值的成员按照字段序的逆序(reverse lexicographical order) 排列,除了成员按分数值递减的次序排列这一点外,zrevrange命令的其他方面和zrange命令一直。
1 | 127.0.0.1:6379> zrevrange chengji 0 -1 |
zrevrangebyscore
ZREVRANGEBYSCORE key max min [WITHSCORES]
zrevrangebyscore 返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。具有相同分数值的成员按字典的逆序(reverse lexicographical order)排列。除了成员按分数值递减的次序排列这一点外,zrevrangebyscore命令的其他方面和zrangebyscore命令一样、
1 | 127.0.0.1:6379> zrevrangebyscore chengji 100 97 withscores |
zrevrank
ZREVRANK key member
zrevrank 命令返回有序集中成员的排名。其中有序集成员分数值递减(从大到小)排序。排名以0位底,也就是说,分数值最大的成员排名是0.使用zrank命令可以获取成员按分数值递增(从小到大)排列的排名。
1 | 127.0.0.1:6379> zrank chengji f |
zscore
zscore 命令返回有序集中,成员的分数值。如果成员元素不是有序集key的成员,或key不存在,返回nil。
1 | 127.0.0.1:6379> zscore chengji ooyhao |
返回值:成员的分数值,以字符串形式表示。
zrem
ZREM key member [member ...]
zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。当key存在但不是有序集合类型时,返回一个错误。
1 | 127.0.0.1:6379> zrem chengji a |
zremrangebylex
ZREMRANGEBYLEX key min max
zremrangebylex 命令用于移除有序集合中给定的字典区间的所有成员。
1 | 127.0.0.1:6379> zremrangebylex chengji [d [f |
zremrangebyrank
ZREMRANGEBYRANK key start stop
zremrangebyrank 命令用于移除有序集中,指定排名(rank)区间内的所有元素
1 | 127.0.0.1:6379> zremrangebyrank chengji 0 2 |
zremrangebyscore
ZREMRANGEBYSCORE key min max
zremrangebyscore 命令用于移除有序集中,指定分数(score)区间内的所有成员
1 | 127.0.0.1:6379> zremrangebyscore chengji 96 97 |
sinterstore
ZINTERSTORE destination numkeys key [key ...]
zinterstore 命令计算给定的一个或多个有序集的交集,其中给定的key的数量必须以numkeys参数指定,并将该交集(结果集)存储到destination中。
默认情况下,结果集中某一个成员分数值是所有给定集下该成员分数值之和。
1 | 127.0.0.1:6379> zadd chengji1 97 a 98 b 99 c 101 d |
zunionstore
ZUNIONSTORE destination numkeys key [key ...]
zunionstore 命令计算给定的一个或多个有序集合的并集,其中给定key的数量必须以numkeys参数指定,并将该并集(结果集)存储到destination中。
默认情况下,结果集中某个成员的分数是所有给定集下该成员分数值之和。
1 | 127.0.0.1:6379> zunionstore chengji4 2 chengji1 chengji2 |
redis的zset集合就介绍这么多了。
本文参考自菜鸟教程:https://www.runoob.com/redis/redis-sorted-sets.html
更多请移步官网