跨度实际上是用来计算排位(rank) 目标节点在跳跃表中的排位 有序集 排序计算

跳跃表的实现 — Redis 设计与实现 http://redisbook.com/preview/skiplist/datastruct.html

有序集合

/* ZSETs use a specialized version of Skiplists */
/*
 * 跳跃表节点
 */
typedef struct zskiplistNode {

    // 成员对象
    robj *obj;

    // 分值
    double score;

    // 后退指针
    struct zskiplistNode *backward;

    // 层
    struct zskiplistLevel {

        // 前进指针
        struct zskiplistNode *forward;

        // 跨度
        unsigned int span;

    } level[];

} zskiplistNode;

/*
 * 跳跃表
 */
typedef struct zskiplist {

    // 表头节点和表尾节点
    struct zskiplistNode *header, *tail;

    // 表中节点的数量
    unsigned long length;

    // 表中层数最大的节点的层数
    int level;

} zskiplist;

Redis源码学习之跳表 - 云+社区 - 腾讯云 https://cloud.tencent.com/developer/article/1353762

 跨度的定义:从前驱节点到自身经历的节点数(包含前驱节点在内),如下图连接线上数字即为箭头指向节点的在对应层的跨度。

17 | 跳表:为什么Redis一定要用跳表来实现有序集合? https://time.geekbang.org/column/article/42896

原文地址:https://www.cnblogs.com/rsapaper/p/13448910.html