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 是链表中的节点的数据结构,list是链表的数据结构。
redis中的链表中保存了表头,表尾,长度,这样可以以时间复杂度O(1)的获取。
还提供了双向链表,每个节点都有prev 和next
最后dup free match实现了链表中数据的多态。