zoukankan      html  css  js  c++  java
  • 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设计与实现》

  • 相关阅读:
    百度竞价与百度优化的区别
    apache +php
    复制别人的内容会被百度惩罚吗?
    百度优化也该有职业道德
    几个 PHP 的“魔术常量”
    用php生成静态html页面
    很早以前就说要学习.net了至今还未学!唉.........
    女人的十个经典故事
    我的网站为什么百度收录的越来越少
    Dbf文件操作
  • 原文地址:https://www.cnblogs.com/cuilichao/p/15696245.html
Copyright © 2011-2022 走看看