zoukankan      html  css  js  c++  java
  • redis设计与实现总结--跳跃表

    跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。
    查找效率平均O(logn),最坏O(N),redis有序集合键的底层实现之一。
     
    zskiplist包含四个重要成员变量
    header:指向跳跃表的表头节点。
    tail:指向跳跃表的表尾节点。
    level:记录目前跳跃表内,层数最大的哪个节点的层数(表头节点不算其中)。
    length:记录跳跃表的长度,也就是包含节点的数量(表头不算)。
     
    其中跳跃表的节点结构
    typedef struct zskiplistNode{
        //后退指针
        struct zskiplistNode *backward;
        //分值,按分值从小到大排序
        double score;
        //成员对象
        robj *obj;
        //
        struct zskiplistLevvel{
            //前进指针 
            zskiplistNode *forward;
            //跨度
            unsigned int span;
        } level[];
    }zskiplistNode;
    其中层每次根据幂次定律随机生成1—32之间的值作为level数组的大小。
    跨度:用于记录两个节点的距离,指向null的所有前进指针的跨度为0,其他为1。主要用于计算排位(跨度累加)。
    后退指针:用于从尾开始遍历节点。
    obj:指向一个字符串对象,保存SDS。
    分值相同的节点按照成员对象在字典序中的大小排序。
  • 相关阅读:
    @Controller @RestController
    HOMEWORD2
    cudnn、cuda
    jupyter使用
    python学习——os模块
    python学习——导入模块、__name__
    python学习——文件
    python学习——函数、内置函数
    python学习——for循环的应用
    python学习——字典、集合、数据类型总结
  • 原文地址:https://www.cnblogs.com/2462478392Lee/p/14745012.html
Copyright © 2011-2022 走看看