定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* ZSETs use a specialized version of Skiplists */
typedef struct zskiplistNode { // 跳跃表节点
sds ele; // 成员对象,sds
double score; // 分值
struct zskiplistNode *backward;
struct zskiplistLevel {
struct zskiplistNode *forward; // 前进指针
unsigned long span; // 跨度
} level[]; // 层级
} zskiplistNode;

typedef struct zskiplist { // 跳跃表
struct zskiplistNode *header, *tail;
unsigned long length;
int level; // 记录跳跃表内,层数最大的那个节点的层数,表头节点不计算在内
} zskiplist;

结构图

跟二叉树很类似的数据结构,平均情况也是O(logN),最坏O(N);

跳跃表的层高都是1-32之间的随机数;

跳跃表中的节点按照分值大小进行排序,当分值相同时,节点按照成员对象的大小进行排序;

更多源码注释说明见server.hhttps://github.com/dalaizhao/redis/tree/feature_code_comment