redis底层数据结构 - skiplist跳表

1,skiplist跳表

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

image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我的关注停止在660不再增长,但却在不记名的暗处增长过百了。尽管它不在关注的名次上显示给众简友看,但这...
    玫瑰枝子葡萄阅读 224评论 2 2
  • 论三国 曹操运兵道,智谋可佳,吕布,勇而无谋,然而身边有谋士为其谋略。 两军交战,成败在人,各有损失,身边能人皆众...
    羽轩_云阅读 331评论 0 0