Redis7.0 5种基本数据类型及listpack

7.0 5 种基本类型的底层结构

以下是 Redis 7.0 中五种基本数据类型的底层结构详解,结合其设计优化与性能特点:

1、String(字符串)​

标题底层结构:

SDS(Simple Dynamic String)​:动态字符串结构,支持自动扩容、二进制安全,并预分配冗余空间以减少内存重分配。

​编码方式:

​INT:存储 64 位整数,直接嵌入 RedisObject 的指针位置。
​EMBSTR:短字符串(≤44 字节)与 RedisObject 连续存储,减少内存碎片。
​RAW:长字符串使用独立 SDS 结构,支持高效追加操作。

优化特性:

根据字符串长度动态选择编码(如 sdshdr8、sdshdr16 等),节省内存。
预分配策略:长度 <1MB 时扩容加倍,≥1MB 时每次扩容 1MB。

2. List(列表)​

底层结构:

QuickList(快速列表)​:双向链表 + ​Listpack​ 的组合结构,每个节点为压缩的 Listpack 片段。
​Listpack:替代旧版 Ziplist,消除级联更新风险,支持局部内存重排。
节点支持 LZF 压缩算法,减少内存占用。

性能特点:

首尾插入/删除操作 O(1),中间操作 O(n)。
分片存储(默认单个 Listpack ≤8KB)平衡内存与查询效率。

​3. Hash(哈希表)​

底层结构:

​Listpack:小规模数据(默认元素数 ≤512,值 ≤64 字节)使用紧凑存储。
​Dict(哈希表)​:大规模数据时转为哈希表,采用渐进式 Rehash 避免阻塞。

优化机制:

渐进式扩容:旧哈希表数据逐步迁移至新表,平滑响应时间。
哈希冲突采用链地址法,负载因子 ≥1 时触发扩容。

​4. Set(集合)​

底层结构:

​IntSet(整数集合)​:元素全为整数且数量少(默认 ≤512)时使用,动态升级编码(16/32/64 位)。
​Dict(哈希表)​:非整数或元素过多时转为哈希表,键为元素、值为 NULL。

特性:

自动去重,支持交集、并集等集合运算。

​5. ZSet(有序集合&#

你可能感兴趣的:(redis,redis)