如上图为跳跃表的结构。由redis.h/zskiplistNode和redis.h/zskiplist两个结构定义。zskiplist结构保存跳跃表节点的相关信息,zskiplistNode表示跳跃表节点。
zskiplist结构定义如下:
typedef struct zskiplist{
structz skiplistNode *header,tail;//表头、表尾节点
unsigned long length;//表中节点数量(不计表头节点)
int level;//节点的最大层数(不计表头节点)
}zskiplist;
zskiplistNode结构定义如下:
typedef struct zskiplistNode{
struct zskiplistLevel{
struct zskiplistNode *forward;//前进指针
unsinged int span;//跨度
}level[];
struct zskiplistNode *backward;//后退指针
double scoece;//分值(跳跃表中节点按分值从小到大排序)
robj *obj;//成员对象
}zskiplistNode;