跳跃表是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表时Redis的有序集合的底层实现之一。
1.跳跃表的数据结构
跳跃表节点:其中的level数组可以包含多个元素,每个元素都包含一个指向其他节点的指针,通过这些层来达到快速访问其他节点的目的。每次创建一个新的跳跃表节点时,会随机生成一个介于1和32之间的整数值作为level数组的大小。
typedef struct zskiplistNode {
robj *obj; // 对象
double score; // 分值
struct zskiplistNode *backward; // 后退指针
struct zskiplistLevel {
struct zskiplistNode *forward; // 前进指针
unsigned int span; // 这个层跨越的节点数量
} level[];
} zskiplistNode;
跳跃表:多个跳跃表节点可以组成一个跳跃表
typedef struct zskiplist {
struct zskiplistNode *header, *tail; // 头、尾节点
unsigned long length; // 节点数量
int level; // 目前表内节点的最大层数
} zskiplist;
2.小结
- Redis的跳跃表由zskiplist和zskiplistNode组成,其中zskiplist用于保存跳跃表的信息,包括表头节点、表尾节点、表的长度,zskiplistNode用于保存每个跳跃表节点的信息,包括分值、对象。
- 跳跃表中的节点按照分值进行排序,当分值相同时,按照成员对象的大小进行排序。
跳跃表是Redis有序集合的底层实现之一,由zskiplist和zskiplistNode组成。节点按照分值排序,分值相同则按对象排序。每个节点包含多个level指针,用于快速访问。创建时,level大小随机生成,介于1和32之间。跳跃表提供高效查找能力,支持有序数据的操作。
1383

被折叠的 条评论
为什么被折叠?



