WangFuJie Blog

路在脚下,心向远方

Redis源码阅读 - Redis对象处理机制

Redis对象处理机制

redisObject(robj)是 Redis 内部统一的数据对象结构,用来封装所有值类型(如 String、List、Hash、Set、ZSet)。redisObject 相当于 Redis 数据的统一“对象头”,负责描述数据类型、编码方式和生命周期,而真正数据存放在 ptr 指向的结构中。

Redis源码阅读 - Redis数据结构基数树(rax)

Redis数据结构基数树(rax)

rax全称为 Radix Tree,也叫基数树,属于前缀树的一种。前缀树 的特点是适合保存具有相同前缀的数据,从而实现节省内存空间的目标,以及支持范围查询。

Redis源码阅读 - Redis数据结构快速列表(quicklist)

Redis数据结构快速列表(quicklist)

quicklist 的设计,其实是结合了链表和 listpack 各自的优势。简单来说,一个 quicklist 就是一个双向链表,而链表中的每个元素又是一个 listpack,配合使用解决了listpack的大内存拷、内存移动,插入删除时间复杂度高等问题。

Redis源码阅读 - Redis数据结构紧凑列表(listpack)

Redis数据结构紧凑列表(listpack)

listpack 也叫紧凑列表,它的特点就是用一块连续的内存空间来紧凑地保存数据,同时为了节省内存空间,listpack 列表项使用了多种编码方式,来表示不同长度的数据,这些数据包括整数和字符串。它是ziplist的替代品,解决了ziplist的级联更新问题。

Redis源码阅读 - Redis数据结构压缩链表(ziplist)

Redis数据结构压缩链表(ziplist)

ziplist 是由一系列特殊编码的内存块构成的列表,可以保存字符数组或整数值。它根据字符长度或者整数大小使用不同的编码类型,用于节约内存空间。添加和删除 ziplist 节点有可能会引起连锁更新。ziplist是在最新版本已经废弃的结构,同样废弃的还有zipmap。代码中依然保留是为了加载低版本RDB时的兼容性。