qiezijiajia

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

概述


1.跳跃表的介绍

2.跳跃表的数据结构

跳跃表的介绍

跳跃表是一个有序的数据结构,通过在每个节点维护多个执行其他节点的指针,从而达到快速访问的目的。

在Redis中只有两个地方用到了跳跃表,一个是有序集合键,另一个是在集群节点作为Redis内部的数据结构。具体源码在本章不介绍了,感兴趣可以去查看zset中的源码,关于跳跃表的create,insert等操作。

跳跃表的数据结构

跳跃表节点数据结构:

typedef struct zskiplistNode {
    robj *obj;  //保存的对象
    double score;  //分值,节点按照score排序,如果score一样,再比较obj大小
    struct zskiplistNode *backward;  //后退指针
    struct zskiplistLevel {  //层
        struct zskiplistNode *forward; //下一个节点指针
        unsigned int span;  //跨度
    } level[];
} zskiplistNode;

在Redis中通过zskiplist来持有跳跃表:

typedef struct zskiplist {
    struct zskiplistNode *header, *tail;
    unsigned long length;  //长度
    int level;  //层数,1-32随机生成
} zskiplist;

跳跃表的遍历:

 

posted on 2017-09-27 16:17  qiezijiajia  阅读(222)  评论(0编辑  收藏  举报