目录
2-1、zinterstore 、zunionstore 命令
- 有序集合相对于哈希、列表、集合来说会有一点点陌生,但既然叫有序集合,那么它和集合必然有着联系,它保留了集合不能有重复成员的特性,但不同的是,有序集合中的元素可以排序。但是它和列表使用索引下标作为排序依据不同的是,它给每个元素设置一个分数( score)作为排序的依据。
- 有序集合中的元素不能重复,但是score可以重复,就和一个班里的同学学号不能重复,但是考试成绩可以相同。
- 有序集合提供了获取指定分数和元素范围查询、计算成员排名等功能,合理的利用有序集合,能帮助我们在实际开发中解决很多问题。
1、Set 集合内操作命令
1-1、zadd 命令
# 返回结果代表成功添加成员的个数
# zadd命令还有四个选项nx、xx、ch、incr 四个选项
# nx: member必须不存在,才可以设置成功,用于添加。
# xx: member必须存在,才可以设置成功,用于更新。
# ch: 返回此次操作后,有序集合元素和分数发生变化的个数
# incr: 对score做增加,相当于后面介绍的zincrby
zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]
1-2、zcard 命令
# 计算成员个数
zcard key
1-3、zscore 命令
# 计算某个成员的分数,如果成员不存在则返回nil
zscore key member
1-4、zrank 命令
# 计算成员的排名,分数从低到高返回排名,排名从0开始计算
zrank key member
# 计算成员的排名,分数从高到低返回排名,排名从0开始计算
zrevrank key member
1-5、zrem 命令
# 删除成员,允许一次删除多个成员,返回结果为成功删除的个数
zrem key member [member ...]
1-6、zincrby 命令
# 增加成员的分数
zincrby key increment member
1-7、zrange、zrevrange 命令
# 有序集合是按照分值排名的,zrange是从低到高返回
zrange key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
# zrevrange反之。如果加上withscores选项,同时会返回成员的分数
zrevrange key start stop [WITHSCORES]
1-8、zrangebyscore 命令
# 返回指定分数范围的成员,从低到高
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
# 返回指定分数范围的成员,从高到低
zrevrangebyscore key max min [withscores][limit offset count]
# 例如从低到高返回200到221分的成员,withscores选项会同时返回每个成员的分数。
# 同时min和max还支持开区间(小括号)和闭区间(中括号),-inf和+inf分别代表无限小和无限大
1-9、zcount 命令
# 返回指定分数范围成员个数
zcount key min max
1-10、zremrangebyrank 命令
# 按升序删除指定排名内的元素
zremrangebyrank key start stop
1-11、zremrangebyscore 命令
# 删除指定分数范围的成员
zremrangebyscore key min max
2、集合间操作命令
2-1、zinterstore 、zunionstore 命令
# 交集
zinterstore destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
# 并集
zunionstore destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
# 这个命令参数较多,下面分别进行说明
# destination:交集计算结果保存到这个键;
# numkeys:需要做交集计算键的个数;
# key [key ...]:需要做交集计算的键;
# weights weight [weight ...]:每个键的权重,在做交集计算时,每个键中的每个member 会将自己分数乘以这个权重,每个键的权重默认是1;
# aggregate sum | min | max : 计算成员交集后,分值可以按照sum(和)、min(最小值)、max(最大值)做汇总,默认值是sum;
3、使用场景
有序集合比较典型的使用场景就是排行榜系统。例如视频网站需要对用户上传的视频做排行榜,榜单的维度可能是多个方面的:按照时间、按照播放数量、按照获得的赞数。