zoukankan      html  css  js  c++  java
  • 2、Redis中的链表

    链表提供高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活的调整链表的长度。
    1、Redis构建了自己的链表,
    链表节点的结构(adlist.h/listNode):
    typedef struct listNode{
    //前置节点
    struct listNode *pre;
    //后置节点
    struct listNode *next;
    //节点的值
    void *value;
    }
    链表结构(adlist.h/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);
    }
    2、Redis链表特定:
    双端:链表中每个链表节点包含前后指针,获得的前后节点的复杂度为O(1)
    无环:表头head的前指针与表尾tail后指针指向为null,链表的访问以null为终点
    带头和尾指针:通过list访问head指针和tail指针,访问链表头和尾的复杂度为O(1)
    带链表长度计数器:通过访问list的len属性来获得list的长度,复杂度为O(1)
    多态:链表节点使用void*指针来保存节点值,并且通过list结构的dup、free、match三个属性为节点值设置类型特定函数,所以链表可以用于保存各种不同类型的值。
     
    3、链表用于范围
    用于实现Redis的列表键、发布与订阅、慢查询、监控器等
     
    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    BZOJ2768: [JLOI2010]冠军调查
    BZOJ1532: [POI2005]Kos-Dicing
    BZOJ1106: [POI2007]立方体大作战tet
    BZOJ1132: [POI2008]Tro
    BZOJ3143: [Hnoi2013]游走
    BZOJ1108: [POI2007]天然气管道Gaz
    BZOJ1131: [POI2008]Sta
    BZOJ1391: [Ceoi2008]order
    BZOJ1116: [POI2008]CLO
    解析HTML、JS与PHP之间的数据传输
  • 原文地址:https://www.cnblogs.com/use-D/p/9704344.html
Copyright © 2011-2022 走看看