1_2_Redis设计与实现读书记-链表

170 阅读1分钟

链表

链表特性:增删快,查询慢,高效的节点重排能力,顺序行的节点访问方式

Redis中使用的链表:发布与订阅、慢查询、监视器、保存多个客户端的状态信息和构建客户端输出缓冲区(output buffer)。

1. 链表和链表节点的实现

​ 链表的结构:

​ 使用多个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;

​ list结构为链表提供了表头指针head,表尾指针tail,以及链表长度计数器len。dup、free和match则用于实现多态链表所需的类型特定函数:

​ (1)dup 函数用于复制链表节点保存的值;

​ (2)freee 函数用于释放链表节点保存的值;

​ (3)match 函数用于对比链表节点所保存的值和另一个值是否相等。

2. 链表和链表节点的API

3. 回顾