Redis对象——有序集合(ZSet)

有序集合类型 (Sorted Set或ZSet) 相比于集合类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序值。有序集合保留了集合不能有重复成员的特性(分值可以重复),但不同的是,有序集合中的元素可以排序。

Redis对象——有序集合(ZSet)

一、内部实现

有序集合是由 ziplist (压缩列表) 或 skiplist (跳跃表) 组成的。

当数据比较少时,有序集合使用的是 ziplist 存储的,有序集合使用 ziplist 格式存储必须满足以下两个条件:

有序集合保存的元素个数要小于 128 个;

有序集合保存的所有元素成员的长度都必须小于 64 字节。

如果不能满足以上两个条件中的任意一个,有序集合将会使用 skiplist 结构进行存储。

有关ziplist 和skiplist 这两种redis底层数据结构的具体实现可以参考我的另外两篇文章。

Redis数据结构——压缩列表

Redis数据结构——跳跃表。

二、常用命令

Redis列表对象常用命令如下表(点击命令可查看命令详细说明)。

命令 说明 时间复杂度
BZPOPMAX key [key ...] timeout   从一个或多个排序集中删除并返回得分最高的成员,或阻塞,直到其中一个可用为止   O(log(N))  
BZPOPMIN key [key ...] timeout   从一个或多个排序集中删除并返回得分最低的成员,或阻塞,直到其中一个可用为止   O(log(N))  
ZADD key [NXXX] [CH] [INCR] score member [score member ...]   添加到有序set的一个或多个成员,或更新的分数,如果它已经存在   O(log(N))  
ZCARD key   获取一个排序的集合中的成员数量   O(1)  
ZCOUNT key min max   返回分数范围内的成员数量   O(log(N))  
ZINCRBY key increment member   增量的一名成员在排序设置的评分   O(log(N))  
ZINTERSTORE   相交多个排序集,导致排序的设置存储在一个新的关键   O(NK)+O(Mlog(M))  
ZLEXCOUNT key min max   返回成员之间的成员数量   O(log(N))  
ZPOPMAX key [count]   删除并返回排序集中得分最高的成员   O(log(N)*M)  
ZPOPMIN key [count]   删除并返回排序集中得分最低的成员   O(log(N)*M)  
ZRANGE key start stop [WITHSCORES]   根据指定的index返回,返回sorted set的成员列表   O(log(N)+M)  
ZRANGEBYLEX key min max [LIMIT offset count]   返回指定成员区间内的成员,按字典正序排列, 分数必须相同。   O(log(N)+M)  
ZREVRANGEBYLEX key max min [LIMIT offset count]   返回指定成员区间内的成员,按字典倒序排列, 分数必须相同   O(log(N)+M)  
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]   返回有序集合中指定分数区间内的成员,分数由低到高排序。   O(log(N)+M)  
ZRANK key member   确定在排序集合成员的索引   O(log(N))  
ZREM key member [member ...]   从排序的集合中删除一个或多个成员   O(M*log(N))  
ZREMRANGEBYLEX key min max   删除名称按字典由低到高排序成员之间所有成员。   O(log(N)+M)  
ZREMRANGEBYRANK key start stop   在排序设置的所有成员在给定的索引中删除   O(log(N)+M)  
ZREMRANGEBYSCORE key min max   删除一个排序的设置在给定的分数所有成员   O(log(N)+M)  
ZREVRANGE key start stop [WITHSCORES]   在排序的设置返回的成员范围,通过索引,下令从分数高到低   O(log(N)+M)  
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]   返回有序集合中指定分数区间内的成员,分数由高到低排序。   O(log(N)+M)  
ZREVRANK key member   确定指数在排序集的成员,下令从分数高到低   O(log(N))  
ZSCORE key member   获取成员在排序设置相关的比分   O(1)  
ZUNIONSTORE   添加多个排序集和导致排序的设置存储在一个新的关键   O(N)+O(M log(M))  
ZSCAN key cursor [MATCH pattern] [COUNT count]   迭代sorted sets里面的元素   O(1)  
三、使用场景 3.1 排行榜系统

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsppjw.html