在redis.h中,skiplistnode变量“ span”是什么意思?

kai*_*521 3 algorithm redis skip-lists data-structures

在中redis.h,skipnode的定义如下:

typedef struct zskiplistNode {
    robj *obj;
    double score;
    struct zskiplistNode *backward;
    struct zskiplistLevel {
        struct zskiplistNode *forward;
        unsigned int span;
    } level[];
} zskiplistNode;
Run Code Online (Sandbox Code Playgroud)

var span是什么意思?此var存储什么?

Sri*_*nan 5

span在特定节点上的“节点”存储当前节点与当前级别的“节点->转发”之间的节点数。span用于计算跳过列表中元素从1开始的等级。

例如,考虑以下跳过列表: 跳过清单

考虑头节点。所有级别的跨度将为1。

考虑节点1。在级别0处,跨度为1,因为如果遵循前向指针,则将跨度 1个元素。在级别1,跨度为2,因为如果遵循前向指针,则将跨度 2个元素(节点2和节点3)。

看一下t_zet.c中函数zslGetRank。您可以看到如何根据每个级别的span值计算排名。