redis数据结构

SDS的定义

每个sds.h/sdshdr结构表示一个SDS值:

struct sdshdr {
// 记录buf数组中已使用字节的数量
// 等于SDS所保存字符串的长度
int len;

// 记录buf数组中未使用字节的数量
int free;

// 字节数组,用于保存字符串
char buf[];
};

优点:

  • 常数复杂度获取字符串长度
  • 杜绝缓冲区溢出
  • 减少修改字符串时带来的内存重分配次数
  • 实现了空间预分配和惰性空间释放
  • 二进制安全
  • 兼容部分C字符串函数

链表和链表节点的实现

每个链表节点使用一个adlist.h/listNode结构来表示:

typedef struct listNode {
// 前置节点
struct listNode *prev;
// 后置节点
struct listNode *next;
// 节点的值
void *value;
} listNode;

使用adlist.h/list来持有链表:

typedef struct list {
// 表头节点
listNode *head;
// 表尾结点
listNode *tail;
// 链表所包含的节点数量
unsigned long len;
// 节点值复制函数
void * ( *dup)(void *ptr);
// 节点释放函数
void (* free)(void *ptr);
// 节点值对比函数
int (*match)(void *ptr, void *key);
} list;

你可能感兴趣的:(redis数据结构)