前情提要:
《redis 从0到1完整学习 (一):安装&初识 redis》
《redis 从0到1完整学习 (二):redis 常用命令》
《redis 从0到1完整学习 (三):redis 数据结构》
《redis 从0到1完整学习 (四):字符串 SDS 数据结构》
《redis 从0到1完整学习 (五):集合 IntSet 数据结构》
《redis 从0到1完整学习 (六):Hash 表数据结构》
《redis 从0到1完整学习 (七):ZipList 数据结构》
《redis 从0到1完整学习 (八):QuickList 数据结构》
《redis 从0到1完整学习 (九):SkipList 数据结构》
《redis 从0到1完整学习 (十):RedisObject 数据结构》
《redis 从0到1完整学习 (十一):RedisObject 之 String 类型》
《redis 从0到1完整学习 (十二):RedisObject 之 List 类型》
《redis 从0到1完整学习 (十三):RedisObject 之 Set 类型》
上一节整体讲了 RedisObject 的数据结构,能灵活地处理不同类型和大小的数据,本文主要介绍 RedisObject 是如何管理 ZSet 类型的数据结构的。
Redis 源码可以点击这里下载,方便查看其中定义的一些数据结构。
Redis 中的 ZSet(Sorted Set)是一种特殊的数据结构,它将集合(Set)和有序列表(Sorted List)的概念结合在一起。ZSet 中的每个成员都有一个分数(score),这个分数可以是任何类型的浮点数,用于对集合中的元素进行排序。
在 Redis 中,ZSet 的数据结构特性如下:
下面是 ZSet 的数据结构:
跳表和 Hash 表的结构可以参考之前的文章:
《redis 从0到1完整学习 (九):SkipList 数据结构》
《redis 从0到1完整学习 (六):Hash 表数据结构》
RedisObject 的 ZSet 数据结构如下:
Hash 用于进行查询,SkipList 用于排序。但是内部保存了两份数据,更耗费内存。
当元素数量不多时,ZSet 采用 ZipList 结构来节省内存,不过需要同时满足两个条件:
zset_max_ziplist_entries
,默认值128zset_max_ziplist_value
字节,默认值64这种情况下:
这种情况下,RedisObject 实现 ZSet 的数据结构如下:
而当不满足 zset_max_ziplist_entries
和 zset_max_ziplist_value
的要求时,则 ZipList 会转换到 SkipList + Hash 表!
《redis 从0到1完整学习 (一):安装&初识 redis》
《redis 从0到1完整学习 (二):redis 常用命令》
《redis 从0到1完整学习 (三):redis 数据结构》
《redis 从0到1完整学习 (四):字符串 SDS 数据结构》
《redis 从0到1完整学习 (五):集合 IntSet 数据结构》
《redis 从0到1完整学习 (六):Hash 表数据结构》
《redis 从0到1完整学习 (七):ZipList 数据结构》
《redis 从0到1完整学习 (八):QuickList 数据结构》
《redis 从0到1完整学习 (九):SkipList 数据结构》
《redis 从0到1完整学习 (十):RedisObject 数据结构》
《redis 从0到1完整学习 (十一):RedisObject 之 String 类型》
《redis 从0到1完整学习 (十二):RedisObject 之 List 类型》
《redis 从0到1完整学习 (十三):RedisObject 之 Set 类型》