1. 程式人生 > >Redis-跳躍表

Redis-跳躍表

相當於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,直到找到對應的值。

類圖: