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存储什么?
span在特定节点上的“节点”存储当前节点与当前级别的“节点->转发”之间的节点数。span用于计算跳过列表中元素从1开始的等级。
例如,考虑以下跳过列表:

考虑头节点。所有级别的跨度将为1。
考虑节点1。在级别0处,跨度为1,因为如果遵循前向指针,则将跨度 1个元素。在级别1,跨度为2,因为如果遵循前向指针,则将跨度 2个元素(节点2和节点3)。
看一下t_zet.c中的函数zslGetRank。您可以看到如何根据每个级别的span值计算排名。