六、Redis基础数据结构-zset
1、说明
有序列表一方面是一个set,保证了内部value的唯一性,另一方面它可以给每个value赋予一个score,代表这个value的排序权重。
zset中最后一个value被移除后,数据结构被自动删除,内存被回收。
2、内部实现
zset内部的排序功能是通过跳跃列表数据结构来实现,一方面保证其是一个hash结构来存储value和score的对应关系,另一方面提供按照score的排序功能,能够指定score的范围来获取value列表的功能。

上面即为跳跃列表的示意图,图中只画了3层,实际共有64层,可容纳264个元素。
3、操作指令
| 命令 | 描述 |
|
ZADD key score1 member1 [score2 member2] |
向有序集合中添加一个或多个成员。如果成员已经存在,则更新已存在的成员的score值 |
|
ZCARD key |
获取有序集合的成员数 |
|
ZCOUNT key min max |
计算有序集合中score值在min到max范围内的成员数 |
|
ZINCRBY key increment member |
将有序集合指定成员的分数加上increment |
|
ZRANGE key start stop [WITHSCORES] |
通过索引区间返回有序集合的成员,如果添加了WITHSCORES,则同时返回成员的分数 |
|
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] |
通过分数返回有序区间内的成员,min<=score<=max,可通过(符号来表示开区间 ZRANGEBYSCORE key (1 5:表示1<score<=5 WITHSCORES:同时返回成员的分数 |
|
ZRANK key member |
返回有序集合中指定成员的索引 |
|
ZREM key member1 [member2 ...] |
移除有序集合中一个或多个成员 |
|
ZREMRANGEBYRANK key start stop |
移除指定索引区间内的成员 |
|
ZREMRANGEBYSCORE key min max |
移除指定分数区间内的成员 |
|
ZREVRANGE key start stop [WITHSCORES] |
返回指定索引区间内的成员,分数从高到低 |
|
ZREVRANGEBYSCORE key max min [WITHSCORES] |
返回指定分数区间内的成员,分数从高到低 |
|
ZREVRANK key member |
返回指定成员的排名,排名按照分数从高到低进行排序 |
|
ZSCORE key member |
返回指定成员的分数 |
|
ZSCAN key cursor [MATCH pattern] [COUNT count] |
迭代遍历有序集合的成员 |
4、使用场景
4.1 延迟队列
将消息序列化成一个字符串作为zset的value,这个消息的到期处理时间作为score,然后用多个线程轮询zset获取到期的任务进行处理。

浙公网安备 33010602011771号