Redis數據結構:跳躍表
阿新 • • 發佈:2019-03-30
有序 組成 個數 對象大小 指向 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 []; //後退指針 structzskiplistNode *backward; //分值 double score; //成員對象 robj *obj; } zskiplistNode;
1. 前進指針(leve[i].forward)用於表頭向表尾方向訪問節點。
2. 跨度(level[i].span)記錄兩個節點之間的關系。
3. 後退指針(backward)用於表尾向表頭方向訪問節點,每次只能後退一個節點。
4. 分值(score),表中的節點按分值大小排序。
5. 成員對象(obj)是一個指針,指向一個SDS對象。
Redis數據結構:跳躍表