有序集合
- 有序集合的基本操作
- 分值范围操作
- 集合运算操作
- 应用场景示例
同集合类型,在集合类型的基础上添加了值的分数,按分数有序。按照元素的分值来有序地储存各不相同的元素。
有序集合和集合一样,都可以包含任意数量的、各不相同的元素(
element),不同于集合的是,有序集合的每个元素都关联着一个浮点数格式的分值(score),并且有序集合会按照分值,以从小到大的顺序来排列有序集合中的各个元素。
虽然有序集合中的每个元素都必须是各不相同的,但元素的分值并没有这一限制,换句话来说,两个不同元素的分值可以是相同的。
有序集合的基本操作
添加元素、删除元素、返回指定元素的分值、返回集合包含的元素数量,等等。
ZADD key score element
添加元素
按照给定的分值和元素,将任意数量的元素添加到有序集合里面,命令的返回 值为成功添加的元素数量。
ZREM key element
删除元素
从有序集合中删除指定的元素,以及这些元素关联的分值,命令返回被成功删除的元素数量。
ZSCORE key element
返回元素的分值
返回有序集合中,指定元素的分值。
ZINCRBY key increment element
增加或减少元素的分值
为有序集合指定元素的分值加上增量 increment ,命令返回执行操作之后,元素的分值。没有相应的 ZDECRBY 命令,但可以通过将
increment 设置为负数来减少分值。
ZCARD key
返回有序集合的基数
返回有序集合包含的元素数量(基数)。复 杂度为 O(1) 。
ZRANK key element
返回元素的排名(rank)
返回指定元素在有序集合中的排名,其中 排名按照元素的分值从小到大计算。排名以 0 开始。
ZREVRANK key member
返回元素的逆序排名(reverse rank)
返回成员在有序集合中的逆序排名,其中排名按照元素的分值从大到小计算。排名以 0 开始。
分值范围操作
基于有序集合的排序性质,对处于某种分值范围之内的多个元素进行操作
ZRANGE key start stop [WITHSCORES]
获取指定索引范围内的升序元素
返回有序集合在按照分值从小到大排列元素(升序排列)的情况下,索引 start 至索引 stop 范围之内的所有元素。两个索引都可以是正数或者负数。当给定
WITHSCORES 选项时,命令会将元素和分值一并返回。
ZREVRANGE key start stop [WITHSCORES]
获取指定索引范围内的降序元素
返回有序集合在按照分值从大到小排列元素(降序排列)的情况下,索引 start 至索引 stop 范围之内的所有元素。两个索引都可以是正数或者负数。当给定
WITHSCORES 选项时,命令会把元素和分值一并返回。
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
获取指定分值范围内的升序元素
返回有序集合在按照分值升序排列元素的情况下,分值在 min 和 max 范围之内的所有元素。给定 WITHSCORES 选项时,元素和分值会一并返回。给定
LIMIT 选项时,可以通过 offset 参数指定返回的结果集要跳过多少个元素,而
count 参数则用于指定返回的元素数量。
ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
获取指定分值范围内的降序元素
返回有序集合在按照分值降序排列元素的情况下,分值在 min 和 max 范围之内的所有元素。给定 WITHSCORES 选项时,元素和分值会一并返回。给定
LIMIT 选项,可以通过 offset 参数指定返回的结果集要跳过多少个元素,而
count 参数则用于指定返回的元素数量。
ZCOUNT key min max
计算给定分值范围内的元素数量
返回有序集合在升序排列元素的情况下,分 值在 min 和 max 范围内的元素数量。
ZREMRANGEBYRANK key start stop
移除指定排名范围内的升序排列元素
移除有序集合中,元素按升序进行排列的情况下,指定排名范围内的所有元素。排名范围可以使用正数和负数。
ZREMRANGEBYSCORE key min max
移除指定分值范围内的升序排列元素
移除有序集合中,分值范围介于 min 和 max 之内的所有元素。
集合运算操作
命令 | 作用 |
---|---|
ZUNIONSTORE destkey numkeys key | 计算并集 |
ZINTERSTORE destroy numkeys key | 计算交集 |
应用场景示例
示例:音乐排行榜
- 将每首歌的名字储存为元素,每首歌的播放次数储存为分值
- 调用 ZREVRANGE 来获取播放次数最多的那些歌曲,以此来实现一个<code>最多播放排行榜</code>。
示例:使用并集计算实现周榜、月榜、年榜
- 要创建周榜、月榜或者年榜,我们可以为每天都创建一个日排行榜
- 然后通过对多个日排行榜进行并集计算,以此来得出周榜、月榜和年榜
**注意,如果参与并集计算的集合比较多,那么 Redis 服务器可能会被阻塞,因此最好在空余
时间或者备用服务器上进行计算。**
Comments | NOTHING
该文章已经关闭评论