Redis键值对是由对象组成的。本文介绍Redis底层实现这些对象的数据结构。包括简单动态字符串,链表,字典,跳跃表,整数集合和压缩列表。
简单动态字符串(SDS)
数据结构如下:
与C字符串有几个区别:
- 常数复杂度时间内获得字符串长度。
- 能够杜绝缓冲区溢出:SDS会先检查是否满足大小,若不满足,会先进行扩展。
- 减少修改字符串时带来的内存重新分配的次数:空间预分配和惰性空间释放。
- 二进制安全:数据库中有时也会存储二进制的数据。SDS用二进制的方式处理。
- 兼容部分C字符串函数。
链表:
数据结构如下:
双端,无环,带表头指针和表尾指针,带链表长度计数器,多态(可以保存各种不同结构的值)。