redis源码跳跃表(zskiplist)

Posted bailuoxi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis源码跳跃表(zskiplist)相关的知识,希望对你有一定的参考价值。

1、跳跃表
  redis使用跳跃表在两个地方:实现有序集合键?集群节点中用作内部数据结构?
  一种有序的数据结构,在每个节点维护多个指向后续节点的指针,完成快速访问后续节点的功能,即就是链表增加了多级索引

技术图片

 

 

Redis的跳跃表由如下:两个结构定义,其中 zskiplistNode结构用于表示跳跃表节点,而 zskiplist结构则用于保存跳跃表节点的相关信息,比如节点的数量,以及指向表头节点和表尾节点的指针等等

typedef struct zskiplistNode 
    robj *obj;
    double score;
    struct zskiplistNode *backward;
    struct zskiplistLevel 
        struct zskiplistNode *forward;
        unsigned int span;
     level[];
 zskiplistNode;

typedef struct zskiplist 
    struct zskiplistNode *header, *tail;          //分别指向跳跃表的表头节点、表尾节点
    unsigned long length;                         //跳跃表的个数
    int level;                                    //跳跃表中所有节点的最大层数(表头节点的层数不计算在内)
 zskiplist;

 

以上是关于redis源码跳跃表(zskiplist)的主要内容,如果未能解决你的问题,请参考以下文章

Redis源码剖析--跳跃表zskiplist

Redis跳跃表

[每日一题]:Redis底层数据结构?

Redis源码解读——跳跃表

Redis源码解读——跳跃表

redis源码分析4---结构体---跳跃表