在redis.h
中,skipnode的定义如下:
typedef struct zskiplistNode {
robj *obj;
double score;
struct zskiplistNode *backward;
struct zskiplistLevel {
struct zskiplistNode *forward;
unsigned int span;
} level[];
} zskiplistNode;
var span
是什么意思?这个var存储了什么?
答案 0 :(得分:4)
span
存储当前节点与节点之间的节点数量 - >当前级别的前向节点。 span
用于计算跳过列表中基于1的元素排名。
例如,请考虑以下跳过列表:
考虑头节点。所有级别的跨度都是1.
考虑节点1.在级别0,跨度为1,因为如果您按照前向指针, span 1个元素。在级别1,span为2,因为如果您按照前进指针,您将 span 2个元素(节点2和节点3)。
看看function zslGetRank in t_zet.c。您可以看到如何根据每个级别的跨度值计算排名。