02 - 核心数据结构
定位: Redis 作为"数据结构服务器"的基石——7 种核心类型的底层实现 面试高频度: ⭐⭐⭐⭐⭐
一、板块在体系中的位置
依赖关系:
- 上游:**基础与架构** — 单线程事件循环中操作这些结构
- 本板块:Redis 内存数据模型的核心
- 下游:**持久化**、**缓存设计**等基于这些结构
二、知识全景图
三、子专题导航
| # | 主题 | 面试频率 | 核心内容 |
|---|---|---|---|
| **02.1 SDS** | String 底层——SDS | ⭐⭐⭐⭐⭐ | 动态字符串的预分配、惰性空间释放、二进制安全 |
| **02.2 Quicklist** | List 底层——Quicklist | ⭐⭐⭐⭐ | ziplist+linkedlist 混合结构、压缩与性能平衡 |
| **02.3 Hash** | Hash 底层实现 | ⭐⭐⭐⭐⭐ | ziplist→hashtable 转换、渐进式 rehash |
| **02.4 Set** | Set 底层实现 | ⭐⭐⭐⭐ | intset→hashtable 转换、整数集合升级 |
| **02.5 ZSet** | ZSet 与 SkipList | ⭐⭐⭐⭐⭐ | skiplist+dict 双重结构、跳表原理 |
| **02.6 Stream** | Stream 消息队列 | ⭐⭐⭐ | 基数树、消费组、消息确认 |
| **02.7 高级结构** | 高级数据结构 | ⭐⭐⭐ | BitMap / HyperLogLog / GEO |
四、核心考点速记
考点 1:SDS 相比 C 字符串的优势
C 字符串 SDS
O(n) 求长度 → O(1) 长度字段
\0 不能存 → 二进制安全
拼接可能溢出 → 自动扩容(预分配)
不能截断释放 → 惰性空间释放考点 2:为什么 ZSet 用跳表不用平衡树?
跳表 O(logN) 平均 平衡树 O(logN)
✓ 实现简单(~50行) ✗ 实现复杂(红黑树~500行)
✓ 范围查询方便 △ 范围查询也可
✓ 插入不旋转 ✗ 插入可能需旋转
✓ 内存可调(层高) ✗ 结构固定考点 3:渐进式 rehash 原理
📚 相关板块
- **基础与架构** — 决定了数据结构的操作模型
- **持久化** — 数据结构如何序列化到磁盘
- **总纲设计文档**