随笔记录
Redis 的 ZSET(Sorted Set,有序集合)
2025-3-4 diaba

Redis 的 ZSET(Sorted Set,有序集合) 是一种非常强大的数据结构,它结合了集合(Set)和哈希表(Hash)的特点,能够存储带有分数(score)的成员(member),并且根据分数对成员进行排序。ZSET 的高效性和灵活性使其在许多场景中被广泛应用,例如实现排行榜、优先队列等。


ZSET 的底层实现结构



Redis 的 ZSET 底层使用了两种数据结构来实现:




  1. 双跳表(Skip List)




  2. 哈希表(Hash Table)




这两种结构共同工作,使得 ZSET 能够高效地支持快速插入、删除和范围查询等操作。


1. 双跳表(Skip List)



跳表是一种基于链表的多级索引数据结构,能够实现快速的查找、插入和删除操作。Redis 的跳表是双层跳表,即每个成员在跳表中同时维护两个指针:



特点:



2. 哈希表(Hash Table)



为了快速访问成员及其对应的分数,Redis 在跳表的基础上增加了一个哈希表。哈希表的键是成员(member),值是一个指针,指向跳表中的节点。


特点:



ZSET 的底层结构组合



Redis 的 ZSET 结构将跳表和哈希表结合起来,形成了一种高效的复合数据结构:



这种组合结构使得 ZSET 能够同时满足以下需求:




  1. 快速访问:通过哈希表实现 O(1) 的成员查找。




  2. 快速排序:通过跳表实现 O(log N) 的插入、删除和范围查询。




  3. 成员唯一性:哈希表确保成员不重复。




ZSET 的应用场景



由于 ZSET 的高效性和灵活性,它在以下场景中被广泛应用:




  1. 排行榜:根据分数对用户进行排序,例如游戏排行榜、电商销量排行榜等。




  2. 优先队列:根据分数动态调整队列顺序,例如任务调度、消息队列等。




  3. 时间序列数据:根据时间戳对数据进行排序,例如日志数据、监控数据等。




总结



Redis 的 ZSET 底层由双跳表哈希表组成。跳表用于快速排序和范围查询,哈希表用于快速访问成员及其分数。这种复合结构使得 ZSET 能够高效地支持插入、删除、查找和范围查询等操作,是 Redis 中非常强大的数据结构之一。
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容