2.1 介绍
zset 保留了 set 集合中不能有重复成员的特点,与之不同的是,zset 中的元素是有序的,集合中的每一个元素都有一个唯一的浮点类型的分数(score)与之关联,依次来进行排序,使得有序集合中的元素可以维护有序性,虽然集合中的元素是不能重复的,但是分数允许重复。
2.2 常用命令
命令 |
介绍 |
时间复杂度 |
zadd key score member [score member ...] |
向有序集合中添加一个或多个成员,以及成员对应的分值 |
O (k * log (n)),k 是添加成员的个数,n 是当前有序集合的元素个数 |
zcard key |
获取有序集合的成员数量 |
O (1) |
zscore key member |
获取有序集合中指定成员的分值 |
O (1) |
zrank key member |
返回有序集合中指定成员的排名(从 0 开始,按分值从小到大排序) |
O (log (n)),n 是当前有序集合的元素个数 |
zrevrank key member |
返回有序集合中指定成员的排名(从 0 开始,按分值从大到小排序) |
O (log (n)),n 是当前有序集合的元素个数 |
zrem key member [member ...] |
移除有序集合中的一个或多个成员 |
O (k * log (n)),k 是删除成员的个数,n 是当前有序集合的元素个数 |
zincrby key increment member |
为有序集合中指定成员的分值加上增量 increment |
O (log (n)),n 是当前有序集合的元素个数 |
zrange key start end [withscores] |
按分值从小到大返回有序集合中指定区间内的成员 |
O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数 |
zrevrange key start end [withscores] |
按分值从大到小返回有序集合中指定区间内的成员 |
O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数 |
zrangebyscore key min max [withscores] |
按分值从小到大返回有序集合中指定分值区间内的成员 |
O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数 |
zrevrangebyscore key max min [withscores] |
按分值从大到小返回有序集合中指定分值区间内的成员 |
O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数 |
zcount key min max |
计算有序集合中指定分值区间内成员的数量 |
O (log (n)),n 是当前有序集合的元素个数 |
zremrangebyrank key start end |
按排名删除有序集合中指定区间内的成员 |
O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数 |
zremrangebyscore key min max |
按分值删除有序集合中指定分值区间内的成员 |
O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数 |
zinterstore destination numkeys key [key ...] |
计算给定的一个或多个有序集合的交集,并将结果存储在新的有序集合 destination 中 |
O (n * k) + O (m * log (m)),n 是输入集合最小的元素个数,k 是集合个数,m 是目标集合元素个数 |
zunionstore destination numkeys key [key ...] |
计算给定的一个或多个有序集合的并集,并将结果存储在新的有序集合 destination 中 |
O (n) + O (m * log (m)),n 是输入集合总元素个数,m 是目标集合元素个数 |
2.3 内部编码
ziplist:如果有序集合中的元素个数较少,或者单个元素体积较小,就使用 ziplist 存储
skiplist:如果元素个数较多或者单个元素体积较大,使用 skiplist 存储
2.4 应用场景
基于 zset 有序的特点,可以用到很多场景中:
- 排行榜系统:比如游戏中的玩家排行榜,以玩家的积分作为分值,玩家昵称作为成员,能按分值(积分)对玩家进行排序,快速获取排名靠前或特定区间的玩家信息;视频平台的视频热度排行榜,以视频的播放量、点赞数等综合指标作为分值,视频 ID 作为成员,展示热门视频。
- 计分系统:在在线考试系统中,以考生的考试成绩作为分值,考生 ID 作为成员,可方便统计成绩排名、获取特定分数段的考生信息。