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实现了链表中数据的多态。