SDS(Simple Dynamic String)
相比 C 字符串优点:
- O(1) 复杂度获取字符串长度
- 减少长度变化时候内存重新分配次数(空间预分配+惰性释放)
- 二进制安全
- 兼容 C 语言字符串处理函数
- 杜绝缓冲区溢出
链表 LinkedList
双向链表
字典 dict
- 双 hashtable,渐进式 rehash
- 拉链法解决 hash 冲突
跳跃表 skiplist
- 查询效率媲美平衡树,实现更简单
- 查找复杂度平均 O(logN),最坏 O(N)
整数集合 intset
- 升级:新加入元素类型比现有所有整数类型长度都要长
- 只允许升级,不支持降级
压缩列表 ziplist
- 节省内存
- 每个节点都会存前一节点长度信息,添加或删除节点时候,有可能引起连锁更新,概率较低
Redis 数据类型底层实现
- string
- int:字符串为 long 型整数
- raw(SDS):字符串长度 > 39 Bytes
- embstr:字符串长度 <= 39 Bytes
- list
- ziplist:元素数量较少
- linkedlist:元素数量较多
- hash
- ziplist:元素数量较少
- dict:元素数量较多
- set
- inset:元素数量较少
- dict:元素数量较多
- zset
- ziplist:元素数量较少时候使用
- skiplist:元素数量较多时候使用