redis设计与实现读书笔记三(链表)

redis链表

链表提供了高效的数据排重能力,能够灵活的增减节点改变链表的长度,能够顺序性的访问节点。
Redis使用c语言并没有实现链表,所以Redis构建了自己的链表结构;
链表在redis中使用的范围非常广泛,也是list使用的底层实现之一,如果列表元素个数比较多 或者元素长度比较长时,redis就会使用链表存储。除此之外,发布与订阅,慢查询,监视器也用到了redis链表,服务器会使用链表保存多个客户端的状态信息,构建客户端输入缓冲区等。

链表和链表节点的实现

节点的数据结构保存在adlist.h/ListNode结构

typedef struct ListNode {
    struct ListNode *prev;//前一个节点
    struct ListNode *next;//后一个节点
    void *value;//节点值
}

redis设计与实现读书笔记三(链表)_第1张图片

虽然使用多个listNode也能实现链表,但是通常使用adlish.h/list来表示链表

typedef struct list {
    ListNode *head;//表头节点
    ListNode *tail;//表尾节点
    unsigned long length;//链表长度
    void *(*dup) (void *ptr);//节点值复制
    void (*free) (void *ptr);//节点值释放
    int (*match) (void *ptr,void *key);//节点值比较函数
}

redis设计与实现读书笔记三(链表)_第2张图片

你可能感兴趣的:(redis设计与实现)