Redis數據結構:跳躍表


1. 跳躍表是有序集合(zset)的底層實現之一;

2. 由zskiplist和zskiplistNode組成;

3. 每個跳躍表節點的層數都是1-32之間的隨機數(每創建一個節點的時候,程序會隨機生成一個數[1-32]作為level數組的大小);

4. 同一個跳躍表中,多個節點可以包含相同的分值,但節點的成員對象是唯一的;

5. 按分值排序,若分值相同就按成員對象大小排序。

zskiplist數據結構

typedef struct zskiplist {
    //頭節點和尾節點
    struct zskiplistNode *header, *tail;

    //節點數量
    unsigned long length;

    //表中節點最大層數
    int level;
} zskiplist;

zskiplistNode 數據結構

typedef struct zskiplistNode {
    //
    struct zskiplistLevel {
        //前進指針
        struct zskiplistNode *forward;
        //跨度
        unsigned int span;
    } level [];

    //后退指針
    struct zskiplistNode *backward;
    //分值
    double score;
    //成員對象
    robj *obj;
} zskiplistNode;

1. 前進指針(leve[i].forward)用於表頭向表尾方向訪問節點。

2. 跨度(level[i].span)記錄兩個節點之間的關系。

3. 后退指針(backward)用於表尾向表頭方向訪問節點,每次只能后退一個節點。

4. 分值(score),表中的節點按分值大小排序。

5. 成員對象(obj)是一個指針,指向一個SDS對象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM