redis数据结构之链表

前言

链表作为一种常用的数据结构,会内置在很多高级的编程语言中,而Redis使用的C语言并没有内置链表数据结构,故redis构建了自己的链表实现

链表特性

  1. 顺序节点访问

  2. 高效节点重排

  3. 灵活调整链表长度

redis中的链表用途

链表在Redis的应用十分广泛,如列表键的底层实现之一就是链表

  • 列表键

  • 发布订阅

  • 慢查询

  • 监视器

  • 保存客户端状态信息

  • 构建客户端输出缓冲区

列表键

当一个列表键包含的元素数量比较多的时候(> 512)或列表中包含的元素都是比较长的字符串的时候(任一个元素 > 64字节),Redis就会使用链表作为列表键的底层实现,否则使用压缩列表数据结构实现,后续文章会介绍


链表在redis中的实现

使用list结构来表示链表,使用listNode来表示每一个链表节点

list

typedef struct list {

    // 链表头节点
    listNode * head;

    // 链表尾节点
    listNode * tail;

    // 链表所包含的节点数量
    unsiged long len;

    // 操作节点函数...
}

listNode

typedef struct listNode {

    // 前置节点
    struct listNode * prev;

    // 后置节点
    struct listNode * next;

    // 节点的值
    void * value;
}

整体结构简图

链表结构图

Redis链表特性

  • 双端(每个节点都有前置/后置节点的指针)

  • 无环(表头节点的prev指针和表尾节点的next指针均为null,即对链表的访问以null为终点)

  • 带有表头指针和表尾指针(head和tail属性)

  • 带链表长度计数器(len属性)

  • 多态(指的是listNode节点保存的值的类型为void,可以保存各种不同类型的值)

总结

redis中自构建的链表数据结构,主要用于列表键的底层实现数据结构

你可能感兴趣的:(redis数据结构之链表)