1. 程式人生 > >Redis數據結構:跳躍表

Redis數據結構:跳躍表

有序 組成 個數 對象大小 指向 head sco list數據 數量

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對象。

Redis數據結構:跳躍表