• redis数据结构链表


    链表作为一种常用的数据结构,内置在很多高级变成语言中,因为Redis使用的C语言中没有内置这种数据结构,所以Redis构建了自己的链表

    每一个链表节点用一个 listNode 来表示

    typeof struct listNode {
      //前置节点
      struct listNode * prev;
      //后置节点
      struct listNode * next;
      //节点的值
      void * value;
    }listNode

    多个 listNode 可以通过 prev 和 next 来组成双端链表

     

    Reids 还维护了一个 list 结构来持有链表,操作更加方便

    typeof 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 链表的特性:

    • 双端:链表节点带有 prev 和 next 指针,获取某个节点的前置和后置节点复杂度都是O(1);
    • 无环:表头节点的 prev 指针和表尾节点的 next 指针都指向 NULL 对链表的访问以 NULL 为终点;
    • 带有表头和表尾指针:通过 list 结构的 head 和 tail 指针,获取表头节点和表尾节点的复杂度为O(1);
    • 带有链表长度计数器:通过 list 结构的 len 属性来对 list 持有节点进行计数,获取节点数量复杂度为O(1);
    • 多态:链表节点使用 void* 指针来保存节点值,可以保存各种不同类型的值;    

    用于操作列表和列表节点的API

     本文参考《Redis设计与实现》

  • 相关阅读:
    常用 Git 命令
    Flex布局
    React-Redux系列4:增加listData列表数据
    React-Redux系列3:修改Store state的值
    React-Redux系列2:Provider提供器和Connect连接器
    React-Redux系列1:简介和安装
    Redux中间件redux-saga中间件之安装、配置、使用
    Redux中间件redux-thunk中间件之安装、配置、使用
    Redux优化之JS纯函数(Pure Function)
    浅谈JS纯函数
  • 原文地址:https://www.cnblogs.com/cuilichao/p/15696245.html
Copyright © 2020-2023  润新知