一、在redis中列表的使用场景
①链表key值底层实现之一是链表。当一个列表键包含了数量较多元素,又或者列表中包含元素字符串较长,Redis就会使用链表作为列表key值。
②发布与订阅、慢查询、监视器等功能也用到了链表。
二、链表和链表节点实现
先看下listNode结构。
typedef struct listNode{
//前节点
struct listNode *prev;
//后节点
struct listNode *next;
//值
void *value;
}
再看下 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的链表 就是这样的 每个链表有一个list 和N个listNode.
三、总结
①链表背广泛用于实现Redis各种功能,例如列表键、发布与订阅、慢查询、监视器等
②每个链表节点由一个listNode结构表示,每个节点由指向前后的指针,Redis链表实现为双端列表。
③每个链表一个list结构
④头尾节点指向NULL,Redis链表为无环链表
参考:《Reids设计与实现》 黄健宏
PS:有错误,改正。有侵权,立马删。