SDS(Simple Dynamic String)

相比 C 字符串优点:

  • O(1) 复杂度获取字符串长度
  • 减少长度变化时候内存重新分配次数(空间预分配+惰性释放)
  • 二进制安全
  • 兼容 C 语言字符串处理函数
  • 杜绝缓冲区溢出

链表 LinkedList

双向链表

字典 dict

  • 双 hashtable,渐进式 rehash
  • 拉链法解决 hash 冲突

跳跃表 skiplist

  • 查询效率媲美平衡树,实现更简单
  • 查找复杂度平均 O(logN),最坏 O(N)

整数集合 intset

  • 升级:新加入元素类型比现有所有整数类型长度都要长
  • 只允许升级,不支持降级

压缩列表 ziplist

  • 节省内存
  • 每个节点都会存前一节点长度信息,添加或删除节点时候,有可能引起连锁更新,概率较低

Redis 数据类型底层实现

  • string
  1. int:字符串为 long 型整数
  2. raw(SDS):字符串长度 > 39 Bytes
  3. embstr:字符串长度 <= 39 Bytes
  • list
  1. ziplist:元素数量较少
  2. linkedlist:元素数量较多
  • hash
  1. ziplist:元素数量较少
  2. dict:元素数量较多
  • set
  1. inset:元素数量较少
  2. dict:元素数量较多
  • zset
  1. ziplist:元素数量较少时候使用
  2. skiplist:元素数量较多时候使用