概述
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;
跳跃表的遍历: