Redis常用命令七:有序集合
前言:
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。应用场景:APP的排行榜(下载排行,阅读排行)、电影打分等等
0、返回有序集中,成员的分数值
ZSCORE key member
例子:zscore 键名 成员名称
1、向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZADD key score1 member1 [score2 member2]
例子: zadd 键名 分数 成员名称
2、通过索引区间返回有序集合成指定区间内的成员(从小到大排序)(和zrevrang
相反) ↓
ZRANGE key start stop [WITHSCORES]
例子:zrange 键名 开始值0 结束值-1
3、返回有序集中指定(下标区间内
)的成员,通过索引,分数从高到低排序(从大到小排序)(和zrang
相反)↑
ZREVRANGE key start stop [WITHSCORES]
例子:zrevrang 键名 起始位置 结束位置
4、返回有序集中指定(分数区间内
)的成员,分数从高到底(和zrevrange
很像,区别在于一个是根据指定位置返回结果,一个是指定分数来返回结果)↑
例子 zrevrangebyscore 键名 指定的最大分数值 指定的最小分数值
特别注意: 分数值指定时一定是大的在前,小的在后,才会返回正确的结果
ZREVRANGEBYSCORE key max min [WITHSCORES]
5、 通过分数
返回有序集合指定区间内的成员,分数从低到高(和zrevrangbyscore
相反)
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
例子 zrangbyscore 键名 指定的最小分数 指定的最大分数 (LIMIT 指定个数)
6、 获取有序集合的成员数
ZCARD key
例子:ZCARD 键名
7 、计算在有序集合中指定区间分数的成员个数 (结果 最小值 <= 个数 <= 最大值)
ZCOUNT key min max
例子 :zcount 键名 最小值 最大值
8、移除有序集合中的一个或多个成员
ZREM key member [member ...]
例子 zrem 键名 成员一 成员二……
9、返回有序集合中指定成员排名的索引,返回有序集 key
中成员 member
的排名。其中有序集成员按 score
值递增(从小到大)顺序排列。排名以 0
为底,也就是说, score
值最小的成员排名为 0
。(和ZREVRANK
相反)
ZRANK key member
例子:zrank 键名 成员
127.0.0.1:6379> zrange fruits 0 -1
1) "pear"
2) "apple"
3) "orange"
127.0.0.1:6379> zscore fruits pear
"8.9000000000000004"
127.0.0.1:6379> zscore fruits apple
"9.0999999999999996"
127.0.0.1:6379> zscore fruits orange
"9.3000000000000007"
127.0.0.1:6379> zrank fruits orange
(integer) 2
127.0.0.1:6379> zrank fruits pear
(integer) 0
10、有序集合中对指定成员的分数加上增量 increment
为有序集
key
的成员member
的score
值加上增量increment
。可以通过传递一个负数值
increment
,让score
减去相应的值,比如ZINCRBY key -5 member
,就是让member
的score
值减去5
。当
key
不存在,或member
不是key
的成员时,ZINCRBY key increment member
等同于ZADD key increment member
。当
key
不是有序集类型时,返回一个错误。
score
值可以是整数值或双精度浮点数。返回值
member
成员的新score
值,以字符串形式表示。
ZINCRBY key increment member
例子 zincrby 键名 要处理的值(默认为正数,负数则减去) 成员名称
127.0.0.1:6379> zscore fruits pear
"8.9000000000000004"
127.0.0.1:6379> ZINCRBY fruits 10 pear
"18.899999999999999"
11、计算给定的一个或多个有序集的并集,并存储在新的 key 中
计算给定的一个或多个有序集的并集,其中给定
key
的数量必须以numkeys
参数指定,并将该并集(结果集)储存到destination
。默认情况下,结果集中某个成员的
score
值是所有给定集下该成员score
值之 和 。WEIGHTS
使用
WEIGHTS
选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的score
值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。如果没有指定
WEIGHTS
选项,乘法因子默认设置为1
。AGGREGATE
使用
AGGREGATE
选项,你可以指定并集的结果集的聚合方式。默认使用的参数
SUM
,可以将所有集合中某个成员的score
值之 和 作为结果集中该成员的score
值;使用参数MIN
,可以将所有集合中某个成员的 最小score
值作为结果集中该成员的score
值;而参数MAX
则是将所有集合中某个成员的 最大score
值作为结果集中该成员的score
值。返回值
保存到
destination
的结果集的基数。
ZUNIONSTORE destination numkeys key [key ...] [AGGREGATE SUM|MIN|MAX]
例子 zunionstore 新集合名称 指定并集个数 并集的成员名1 并集的成员名2 聚合方式
redis> ZRANGE programmer 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
redis> ZRANGE manager 0 -1 WITHSCORES
1) "herry"
2) "2000"
3) "mary"
4) "3500"
5) "bob"
6) "4000"
# 公司决定加薪。。。除了程序员。。。
redis> ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3
(integer) 6
redis> 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"
12、计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
计算给定的一个或多个有序集的交集,其中给定
key
的数量必须以numkeys
参数指定,并将该交集(结果集)储存到destination
。默认情况下,结果集中某个成员的
score
值是所有给定集下该成员score
值之和.
ZINTERSTORE destination numkeys key [key ...]
例子 zinterstore 新集合名称 个数 成员1 成员2
redis > ZADD mid_test 70 "Li Lei"
(integer) 1
redis > ZADD mid_test 70 "Han Meimei"
(integer) 1
redis > ZADD mid_test 99.5 "Tom"
(integer) 1
redis > ZADD fin_test 88 "Li Lei"
(integer) 1
redis > ZADD fin_test 75 "Han Meimei"
(integer) 1
redis > ZADD fin_test 99.5 "Tom"
(integer) 1
redis > ZINTERSTORE sum_point 2 mid_test fin_test
(integer) 3
redis > ZRANGE sum_point 0 -1 WITHSCORES # 显示有序集内所有成员及其 score 值
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"
13 ZLEXCOUNT key min max
在有序集合中计算指定字典区间内成员数量
14 ZRANGEBYLEX key min max [LIMIT offset count]
通过字典区间返回有序集合的成员
15 ZREMRANGEBYLEX key min max
移除有序集合中给定的字典区间的所有成员
16 ZREMRANGEBYRANK key start stop
移除有序集合中给定的排名区间的所有成员
17 ZREMRANGEBYSCORE key min max
移除有序集合中给定的分数区间的所有成员
18 ZREVRANK key member
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
19 ZSCAN key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成员和元素分值)