开发者学堂课程【Redis 数据库入门:Redis_集合_有序集合操作_2】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/15/detail/53
Redis_集合_有序集合操作_2
内容介绍
一、SortedSet 有序集合
二、命令
一、SortedSet有序集合
每个元素都关联着一个浮点数分值,,这是有序的原因,有序就是按照分值从小到大的顺序排列集合中的元素,分值可以相同。
例如:
一个保存了水果价格的有序集合
一个保存了员工薪水的有序集合
一个有序集合,保存了正在阅读某些技术书的人数
有了集合,按照有序集合,取分值时就可以按照这个分值来进行排序。集合中对应的分值可以存储浏览数量或者点赞数量,根据这些数量排完序之后,排行榜就出来了。
二、命令
1.增加一个或多个元素
如果命令中有z开头,都是对有序的集合进行操作。S是 set,L是 list,如果不写,就是 string。 ZADD 就操作元素和分值。
举例:
ZADD fruits 3.2 banana
ZADD fruits 2.0 watermelon
加入进来的同时就已经排序了。
2.移除一个或多个元素
如果元素不存在则自动忽略。
举例:
ZREM fruits 石榴 梨 芒果
ZREM fruits 西瓜
3.显示分值
ZSCORE key member
注意:计算机并不能精确表达每个浮点数,都是一种近似表达。
举例:
ZSCORE fruits 芒果
ZSCORE fruits 西瓜
4.增加或减少分值
ZINCRBY key increment member
increment 为负数就是减少
increment 表示增长数量,member 表示增长对象
举例:
ZINCRBY fruits 1.5西瓜
ZINCRBY fruits -0.8香蕉
5. 返回元素的排名(索引)
ZRANK 不是索引,只是一个排名。默认条件下是正序。
ZRANK key member
举例:
ZRANK fruits 西瓜
ZRANK fruits 石榴
ZRANK fruits 芒果
6. 返回元素的逆序排名
ZREVRANK key member
REV 是反转的意思,0就是最大的。
举例:
ZREVRANK fruits 西瓜
ZREVRANK fruits 番石榴
ZREVRANK fruits 芒果
7. 返回指定索引区间元素
ZRANGE key start stop [WITHSCORES]
取值同时可以带分数,也可以不带分数。
如果 score 相同,则按照字典序 lexicographical order 排列
默认按照 score 从小到大,如果需要 score 从大到小排列,使用 ZREVRANGE
举例:
ZRANGE fruits 0 2
ZRANGE fruits -5 -4(把第一第二位取出)
8. 返回指定索引区间元素
ZREVRANGE key start stop [WITHSCORES]
如果 score 相同,则按照字典序 lexicographical order 的逆序排列默认按照 score从大到小,如果需要 score 从小到大排列,使用 ZRANGE
ZREVRANGE fruits 0 2(从最大的开始,可以通过此命令取到前10个)
ZREVRANGE fruits -5 -4
9. 返回指定分值区间元素
ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count],(表示跳过多少个开始取多少个);
返回 score 默认属于[min,max]之间,元素按照 score 升序排列,score 相同字典序;
LIMIT 中 offset 代表跳过多少个元素,count 是返回几个。类似于 Mysql;
使用小括号,修改区间为开区间,例如(5、(10、5);
-inf和+inf表示负无穷和正无穷;
举例:
ZRANGEBYSCORE fruits 4.0 7.0(表示取4.0到7.0之间)
ZRANGEBYSCORE fruits (4 7
ZRANGEBYSCORE fruits -inf +inf
如果是工资就可以指定工资的区间,把里面的元素都取出来。
10. 返回指定分值区间元素ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count];
返回 score 默认属于[min,max]之间,元素按照 score 降序排列,score 相同字典降序;
LIMIT 中 offset 代表跳过多少个元素,count 是返回几个。类似于 Mysql;
使用小括号,修改区间为开区间,例如(5、(10、5);
-inf 和+inf 表示负无穷和正无穷;
举例:
ZREVRANGEBYSCORE fruits 7.0 4.0
ZRANGEBYSCORE fruits 7(4
ZRANGEBYSCORE fruits +inf -inf
11.移除指定排名范围的元素
ZREMRANGEBYRANK key start stop
举例:
ZREMRANGEBYRANK fruits 0 2( remove 0到2的值,是真正的删除)
ZRANGE fruits 0 -1
12. 移除指定分值范围的元素
ZREMRANGEBYSCORE key min max
举例:
ZREMRANGEBYSCORE fruits 3.0 5.0(删除了西瓜、香蕉、番石榴)
ZRANGE fruits 0 -1
13.返回集合中元素个数
ZCARD key
14.返回指定范围中元素的个数
ZCOUNT key min max
ZCOUNT fruits 4 7(表示4到7之间有多少个元素)
ZCOUNT fruits (4 7
15.并集
既然是集合,所以他有并集的操作和 set 很类似,并集的操作稍微有一点复杂。 如果是集合的并集,只需要考虑集合元素即可。如果是有序集合的并集,考虑元素同时还得考虑分数。
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight][AGGREGATESUM|MIN|MAX]
numkeys 指定 key 的数量,必须;
WEIGHTS 选项,与前面设定的 key 对应,对应 key 中每一个 score 都要乘以这个权重;
AGGREGATE 选项,指定并集结果的聚合方式;
SUM:将所有集合中某一个元素的 score 值之和作为结果集中该成员的 score 值;
MIN:将所有集合中某一个元素的 score 值中最小值作为结果集中该成员的 score 值;
MAX:将所有集合中某一个元素的 score 值中最大值作为结果集中该成员的 score 值











