Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

底层数据结构-zskiplist

  • 跳表

  • 一般只用于有序集合ZSet,定义在server.h

  • 结构定义

    ##单个节点
    typedef struct zskiplistNode {
        sds ele;
        double score;
        struct zskiplistNode *backward;
        struct zskiplistLevel {
            struct zskiplistNode *forward;
            unsigned int span;
        } level[]
    } zskiplistNode;
    
    • 字段解释
      • ele表示持有的数据
      • score表示节点的分数,用作升序排列存储的依据
      • backward表示后面一个紧邻节点
      • level是一个数组,可以挂上一堆节点,用来跳跃
        • forward表示前面能看到的某个跳跃节点
        • span表示跳跃节点与当前的距离,紧邻的话定义为1
    ##整个跳表
    typedef struct zskiplist {
        struct zskiplistNode *header, *tail;
        unsigned log length;
        int level;
    } zskiplist;
    
    • header头节点不持有任何数据,ele为null,但是level的长度为最大的32