“Better code, better life. ”
Redis
数据结构–链表
链表在Redis
中使用的非常广泛,比如列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis
就会使用链表作为底层实现。除链表键外,发布与订阅、慢查询、监视器等功能也用到了链表。
定义
先看一下源码中对链表节点的定义
typedef struct listNode {
struct listNode *prev;
struct listNode *next;
void *value;
} listNode;
typedef struct listIter {
listNode *next;
int direction;
} listIter;
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;
每个listNode
含有一个前向指针和一个后向指针,以及节点的值。
listIter
是链表迭代器,它有一个指向下一个元素的next指针和一个方向标志。
list
本身包含头尾节点两个指针,和链表长度。另外,有三个函数指针,功能分别为节点复制、节点释放、节点比较。