Redis使用跳躍表作爲有序集合鍵的底層實現之一,如果一個有序集合包含的元素數量較多,或者有序集合中成員是較長的字符串時,Redis就會使用跳躍表來作爲有序集合鍵的底層實現。
和鏈表、字典等數據結構在Redis內部的廣泛應用不同,Redis只在實現有序集合鍵和集羣節點中用到跳躍表。
跳躍表節點 zskiplistNode
typeof struct zskiplistNode {
//層
struct zskipzlistLevel{
//前進指針
struct zskiplistNode *forward;
//跨度
unsigned int span;
} level[];
//後退指針
struct zskiplistNode *backward;
//分值
double score;
//成員對象
rojb *obj;
} zskiplistNode;
跳躍表 zskiplist
typeof struct zskiplist {
//表頭節點和表尾節點
structz skiplistNode *header, *tail;
//表中節點數量
unsigned long length;
//表中層數最大節點的層數
int level;
} zskiplist;