Redis SDS (Simple Dynamic String)

Redis 底层字符串实现,相比 C 原生字符串更安全高效

与 C String 的核心差异

特性C StringRedis SDS
获取长度O(n) 遍历O(1) 直接读取 len 字段
二进制安全❌ 遇 \0 截断✅ 支持任意二进制数据
缓冲区溢出需手动检查自动扩容
内存分配每次修改都分配预分配 + 惰性释放

数据结构

struct sdshdr {
    int len;      // 已使用长度
    int free;     // 剩余可用
    char buf[];   // 实际存储
};

核心优势

  1. O(1) 长度查询 — 无需遍历,适合高频操作
  2. 二进制安全 — 可存储图片、序列化数据等任意内容
  3. 自动扩容 — 修改时自动检查并扩展空间,杜绝溢出
  4. 空间预分配 — 减少内存重分配次数(< 1MB 翻倍,> 1MB 增加 1MB)
  5. 惰性释放 — 缩短时不立即释放,预留下次使用

应用场景

  • Redis 的 String 类型底层
  • Hash 类型的键值对
  • List、Set、ZSet 的元素存储

相关页面