二 链表
链表提供了高效的节点重排能力,以及顺序访问节点的访问方式,并且可以通过增减节点来灵活调整链表长度,在Redis中使用非常广泛,比如列表键,发布与订阅,慢查询,缓冲区等。
Redis中链表节点使用listNode来表示,其结构如下:
`struct listNode{
//前置节点
struct listNode *prev
//后置节点
struct listNode *next
//节点数据
void *value
}`
多个listNode通过prev和next指针相连,组成双端链表,结构为:
`struct list{
//表头节点
listNode *head;
//表尾结点
listNode *tail;
//链表长度
long len;
//节点值复制函数,用于复制链表节点保存的值
void *(*dup)(void *ptr);
//节点值删除函数,用于释放链表节点保存的值
void *(*free)(void *ptr);
//节点值对比函数,用于比较链表节点的值与输入值是否相等
void *(*match)(void *ptr);
}`
链表的前置节点与后置节点都指向NULL,所以Redis链表是一个无环链表。