一、Redis 数据结构
(一)简单动态字符串
(二)链表
typedef struct listNode {
struct listNode *prev;
struct listNode *next;
void *value;
} listNode;
listNode 是一个[双向链表](../datastructure/0203.md。
typedef struct list {
listNode *head;//表头节点
listNode *tail;//表尾节点
void *(*dup)(void *ptr);//节点复制函数
void (*free)(void *ptr);//节点释放函数
int (*match)(void *ptr, void *key);//节点对比函数
unsigned long len;//链表所包含的节点数量
} list;

(三)字典
struct dictEntry {
void *key;
union {
void *val;
uint64_t u64;
int64_t s64;
double d;
} v;
struct dictEntry *next; /* Next entry in the same hash bucket. */
void *metadata[]; /* An arbitrary number of bytes (starting at a
* pointer-aligned address) of size as returned
* by dictType's dictEntryMetadataBytes(). */
};
(四)跳跃表
(1)跳跃表节点
typedef struct zskiplistNode {
sds ele;//
double score;//分值
struct zskiplistNode *backward;//后退指针
struct zskiplistLevel {
struct zskiplistNode *forward;//前进指针
unsigned long span;//跨度
} level[];//层
} zskiplistNode;
(2)跳跃表
typedef struct zskiplist {
struct zskiplistNode *header, *tail;//表头指针和表尾指针
unsigned long length;//表中节点的数量
int level;//表中层数最大的节点的层数
} zskiplist;
(五)整数集合
typedef struct intset {
uint32_t encoding;//编码方式
uint32_t length;//集合包含的元素数量
int8_t contents[];//保存元素的数组
} intset;
整数集合
