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;

    跳跃表的遍历:

  • 相关阅读:
    Nginx Record
    Go 查找元素
    博客转移公告
    模板库
    模板库
    【BZOJ2276】Temperature
    【BZOJ3524】Couriers
    【BZOJ4458】GTY的OJ
    AtCoder Grand Contest 007
    Editing 2011-2012 ACM-ICPC Northeastern European Regional Contest (NEERC 11)
  • 原文地址:https://www.cnblogs.com/dpains/p/7602364.html
Copyright © 2011-2022 走看看