Redis SDS (Simple Dynamic String)
Redis 底层字符串实现,相比 C 原生字符串更安全高效
与 C String 的核心差异
| 特性 | C String | Redis SDS |
|---|---|---|
| 获取长度 | O(n) 遍历 | O(1) 直接读取 len 字段 |
| 二进制安全 | ❌ 遇 \0 截断 | ✅ 支持任意二进制数据 |
| 缓冲区溢出 | 需手动检查 | 自动扩容 |
| 内存分配 | 每次修改都分配 | 预分配 + 惰性释放 |
数据结构
struct sdshdr {
int len; // 已使用长度
int free; // 剩余可用
char buf[]; // 实际存储
};核心优势
- O(1) 长度查询 — 无需遍历,适合高频操作
- 二进制安全 — 可存储图片、序列化数据等任意内容
- 自动扩容 — 修改时自动检查并扩展空间,杜绝溢出
- 空间预分配 — 减少内存重分配次数(< 1MB 翻倍,> 1MB 增加 1MB)
- 惰性释放 — 缩短时不立即释放,预留下次使用
应用场景
- Redis 的 String 类型底层
- Hash 类型的键值对
- List、Set、ZSet 的元素存储
相关页面
- mysql-soft-delete — 数据库相关踩坑
- nodejs — 后端技术栈
- docker — 容器化部署