链表在Redis中的应用:
列表键的底层实现之一是链表;
发布与订阅,慢查询,监视器等功能也用到了链表;
Redis服务器本身使用链表保存多个客户端的状态信息;
使用链表来构建客户端输出缓冲区;
链表和链表节点的实现:
typedef struct listNode{
struct listNode *prev;//前置节点
struct listNode *next;//后置节点
void *value;//节点的值
}ListNode;
操作链表的类:
typedef struct list{
listNode *head;//表头节点
listNode *tail;//表尾结点
unsigned long len;//链表节点数量
void *(*dup)(void * ptr);//节点值复制函数
void (*free)(void *ptr);//节点值释放函数
int (*match)(void *ptr,void *key);//节点值对比函数
}
Redis中的链表特性:
带表头指针和表尾指针的双端无环链表,可以O(1)获取链表长度。
多态:链表节点使用void *指针来保存节点值,并且可以通过list结构的dup,free,match三个属性为节点值设置类型特定函数,所以链表可以用于保存各种不同类型的值。