Redis-跳躍表
阿新 • • 發佈:2018-11-09
相當於Redis 中的 sorted set
跳躍表節點結構:
typedef struct zskiplistNode {
struct zskiplistNode *backward; //後退指標
double score; //分值
robj *obj; //值
struct zskiplistLevel { //層
struct zskiplistNode *forward; //前進指標
unsigned int span; //跨度
} level[];
}
跳躍表結構:
typedef struct zskiplist {
structz zkiplistNode *heard; //表頭節點指標
structz zkiplistNode *tail; //表尾節點指標
unsigned long length; //表中的節點數目
int level; //表中層數最大的節點的層數
} zskiplist;
結構圖:
查詢的步驟:
1、從header指標出發,找到第一個節點。
2、從節點一的最高層拿到值,進行比較,如果等於則返回結果。如果值大於查詢值,則返回查詢不到的訊息(因為是排序的,頭節點為最小值)。如果值小於查詢值,則根據前進指標,找到下一個節點。
3、節點的比較方法,類比步驟2.
4、如果節點的前進節點為空(最尾值),還是找不到相應的值,則返回查詢不到訊息。
5、如果節點的當前節點值 > 查詢的值,其下一個節點的值 > 查詢的值。那麼就在當前節點降層查詢。
6、依次執行步驟5,直到找到對應的值。
類圖: