Redis底层数据结构之链表

一、在redis中列表的使用场景

  ①链表key值底层实现之一是链表。当一个列表键包含了数量较多元素,又或者列表中包含元素字符串较长,Redis就会使用链表作为列表key值。

  ②发布与订阅、慢查询、监视器等功能也用到了链表。

二、链表和链表节点实现

  先看下listNode结构。

typedef struct listNode{

 //前节点
   struct listNode *prev;
 
 //后节点
   struct listNode *next;

  //值
   void *value;

}

再看下 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;

redis的链表 就是这样的 每个链表有一个list 和N个listNode.

三、总结

①链表背广泛用于实现Redis各种功能,例如列表键、发布与订阅、慢查询、监视器等

②每个链表节点由一个listNode结构表示,每个节点由指向前后的指针,Redis链表实现为双端列表。

③每个链表一个list结构

④头尾节点指向NULL,Redis链表为无环链表

参考:《Reids设计与实现》  黄健宏 

PS:有错误,改正。有侵权,立马删。

猜你喜欢

转载自blog.csdn.net/wuye_lh/article/details/107023154