概述
1.跳跃表的介绍
2.跳跃表的数据结构
跳跃表的介绍
跳跃表是一个有序的数据结构,通过在每个节点维护多个执行其他节点的指针,从而达到快速访问的目的。
在Redis中只有两个地方用到了跳跃表,一个是有序集合键,另一个是在集群节点作为Redis内部的数据结构。具体源码在本章不介绍了,感兴趣可以去查看zset中的源码,关于跳跃表的create,insert等操作。
跳跃表的数据结构
跳跃表节点数据结构:
typedef struct zskiplistNode {
robj *obj; //保存的对象
double score; //分值,节点按照score排序,如果score一样,再比较obj大小
struct zskiplistNode *backward; //后退指针
struct zskiplistLevel { //层
struct zskiplistNode *forward; //下一个节点指针
unsigned int span; //跨度
} level[];
} zskiplistNode;
在Redis中通过zskiplist来持有跳跃表:
typedef struct zskiplist {
struct zskiplistNode *header, *tail;
unsigned long length; //长度
int level; //层数,1-32随机生成
} zskiplist;
跳跃表的遍历: