上一篇我们已经介绍完了Redis的内存模型,本篇我们一起来看一下Redis数据结构。Redis常用的数据结构有以下几种:
简单动态字符串
链表
字典
跳表
整数集合
压缩列表
对象
struct sdshdr{ //记录buf数组中已使用字节的数量 //等于 SDS 保存字符串的长度 int len; //记录 buf 数组中未使用字节的数量 int free; //字节数组,用于保存字符串 char buf[];}
其中,len 保存了SDS保存字符串的长度,buf[] 数组用来保存字符串的每个元素,free记录了 buf 数组中未使用的字节数量。SDS的数据结构示意图如下:
获取字符串长度时间复杂度降低
避免了缓冲区溢出
可以使用空间预分配策略
存取二进制数据
typedef struct listNode { //前置节点 struct listNode *prev; //后置节点 struct listNode *next; //节点的值 void *value;}listNodetypedef struct list { //表头节点 listNode.head; //表尾节点 listNode.tail; //链表所包含的节点数量 unsigned long len; //节点值复制函数 void *(*dup)(void *ptr); //节点值释放函数 void *(*free)(void *ptr); //节点值对比函数 int (*match)(void *ptr,void *key);} list;
数据结构示意图如下:
双端
无环
带链表长度计数器
多态