1,skillist跳表
1)zskipListNode和zskiplist定义
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底层使用字典和跳跃表。
image.png字典和跳跃表通过指针共享score和member,不会造成任何数据重复。
2)dict保存member-score
的映射,用于查找member的分数。
skiplist:用户执行范围操作。
3)zset底层使用dict + zskiplist实现
网友评论