redis底层数据结构 - skiplist跳表

1,skillist跳表

1)zskipListNode和zskiplist定义

redis底层数据结构 - skiplist跳表_第1张图片
image.png

2)zskiplist跳表结构 保存跳跃表信息,表头、表尾、长度、最大层数
header: 表头节点
tail: 表尾节点
level: 最大层数
length: 跳表节点数量
3)zskiplistNode跳表节点 每个节点层高1~32随机数
ele: sds字符串对象,保存节点的member成员,唯一的。
score: double类型的分数,从小到大排序。score相同,按照ele的字典顺序排序。
backward: 后退指针,节点的prev节点,用于表尾向表头遍历。
level数组: 每个元素都包含一个forward前进指针和span跨度。
forward: 前进指针,每一层都有指向表尾方向的前进指针,用于实现多层链表。
span: 跨度,记录两个节点之间的距离,用于计算rank排名。

2,zset底层跳表实现

1)zset底层使用字典和跳跃表。字典和跳跃表通过指针共享score和member,不会造成任何数据重复。
2)dict保存member-score的映射,用于查找member的分数。
skiplist:用户执行范围操作。
3)zset底层使用dict + zskiplist实现

redis底层数据结构 - skiplist跳表_第2张图片
image.png

你可能感兴趣的:(redis底层数据结构 - skiplist跳表)