Redis学习笔记 ——(6)有序集合的用法、内部编码、使用场景
有序集合相对于哈希、列表、集合会有一点陌生,但既然叫有序集合,一定和集合有着一些联系,它保留了集合不能有重复成员的特性,但不同于集合的是,有序集合的元素可以进行排序。但是它和列表使用索引作为下标的类型不太一样,它给每个元素设置了一个分数(score),根据这个score进行排序。
命令
- ZADD key score1 member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数 - ZCARD key
获取有序集合的成员数 - ZCOUNT key min max
计算在有序集合中指定区间分数的成员数 - ZINCRBY key increment member
有序集合中对指定成员的分数加上增量 increment - ZINTERSTORE destination numkeys key [key …]
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 destination 中 - ZLEXCOUNT key min max
在有序集合中计算指定字典区间内成员数量 - ZRANGE key start stop [WITHSCORES]
通过索引区间返回有序集合指定区间内的成员 - ZRANGEBYLEX key min max [LIMIT offset count]
通过字典区间返回有序集合的成员 - ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
通过分数返回有序集合指定区间内的成员 - ZRANK key member
返回有序集合中指定成员的索引 - ZREM key member [member …]
移除有序集合中的一个或多个成员 - ZREMRANGEBYLEX key min max
移除有序集合中给定的字典区间的所有成员 - ZREMRANGEBYRANK key start stop
移除有序集合中给定的排名区间的所有成员 - ZREMRANGEBYSCORE key min max
移除有序集合中给定的分数区间的所有成员 - ZREVRANGE key start stop [WITHSCORES]
返回有序集中指定区间内的成员,通过索引,分数从高到低 - ZREVRANGEBYSCORE key max min [WITHSCORES]
返回有序集中指定分数区间内的成员,分数从高到低排序 - ZREVRANK key member
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 - ZSCORE key member
返回有序集中,成员的分数值 - ZUNIONSTORE destination numkeys key [key …]
计算给定的一个或多个有序集的并集,并存储在新的 key 中 - ZSCAN key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成员和元素分值)
内部编码
有序集合的内部编码有两种
- ziplist
有序集合的元素个数小于默认128时,同时每个元素的值都小于默认64字节时,redis会用ziplist作为它的内部编码,可以有效减少内存的使用 - skiplist
当不满足ziplist时,会采用ziplist作为内部实现,因此ziplist的读写效率会下降
使用场景
有序集合比较经典的使用场景就是排行榜系统,例如视频网站需要对用户上传的视频做排行榜,榜单的维度可能是多方便的,例如按照时间、播放量、点赞数量、收藏数量,这个时候使用就可以采用有序集合来进行实现。