链表提供了高效的节点重排,链表可以通过新增、删除节点来控制链表的长度。Redis中也广泛引用了列表,比如列表键底层的数据结构就是使用的链表,除了列表键外还有一些发布订阅、慢查询、监视器等功能也使用到了链表。作为常用的数据结构Redis也重写了链表结构。下面我们看下Redis内部链表的属性。
LinkNode:
typedef struct listNode {
// 前置节点
struct listNode * prev;
// 后置节点
struct listNode * next;
//节点的值
void * value;
}listNode;
list
typedef struct list {
//
表头节点
listNode * head;
//
表尾节点
listNode * tail;
//
链表所包含的节点数量
unsigned long len;
//
节点值复制函数
void *(*dup)(void *ptr);
//
节点值释放函数
void (*free)(void *ptr);
//
节点值对比函数
int (*match)(void *ptr,void *key);
} list;
示例

Redis自己实现的链表存储了一些额外的信息,比如头尾节点、长度字段、节点使用的类型。这些都对链表的查询速度进行了优化,设计思想就是以空间换时间
参考:《Redis开发与实现》