zoukankan      html  css  js  c++  java
  • Redis 设计与实现(第五章) -- 跳跃表(skiplist)

    概述


    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;

    跳跃表的遍历:

  • 相关阅读:
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第六周&java实验报告四
    第五周课程总结&试验报告(三)
    第四周作业
    2019春总结作业
    第二周基础作业
    第三周作业
    2019期末总结
    第十四周课程总结 & 实验报告
  • 原文地址:https://www.cnblogs.com/dpains/p/7602364.html
Copyright © 2011-2022 走看看