深入剖析 redis 数据结构 redisObject
这篇讲的是Redis核心数据结构redisObject的设计。它只有32位,却极其高效地管理了所有类型的数据对象。 作者从结构体定义出发,揭示了它的精巧布局:type字段明确是字符串、列表还是哈希等类型;encoding字段则决定了底层是用普通字符串、压缩列表还是跳表来存储——同一个类型的数据可以有多种编码,Redis会根据数据规模自动选择最省内存的方案。比如一个小的集合可能用整数集合,变大了就切换为哈希表。 文章还详解了lru字段如何用于内存淘汰,以及refcount引用计数如何管理对象生命周期。最后那个void *ptr指针,才是真正指向数据的地方。 作者特别指出,得益于Redis单线程模型,引用计数的操作无需考虑线程安全,这是与Memcached等多线程系统的重要区别。整个设计将数据与元数据分离,各个字段职责清晰,正是Redis高效与灵活的重要基石。