《Redis设计与实现》第五章 跳跃表

跳表是一种有序的数据结构,它通过在每个节中维持多个指向其他节点的指针,从而达到快速访问节点的目的。

跳跃表支持平均(LogN)最坏O(N)时间复杂度的查找。
跳跃表作为有序集合键的底层实现之一。
redis两个地方用到了跳跃表:一个是实现有序集合键、另外一个是在集群节点中用作内部数据结构,除此之外没有其他用处了。

5.1 跳跃表的实现

redis.h/zksiplistNoderedis.h/zskiplist两个结构定义。

-w747
-w731
位于skiplist右方是4个skiplistNode节点,每层是代表层数,右指针右边跨越数。BW 指向位于当前节点的前一个节点用于从后往前遍历时使用。

-w751

5.1.1 跳跃表节点

-w442
1、层 扔硬币法则 幂次定律 只有在1-32之间,所以level[0]就是第一层如此类推。

2、前进指针 每个层都有一个指向表尾方向的前进指针,用于从表头向表尾方向访问节点。

-w748

3、跨度 两个节点之间跨度越大 他们距离得越远。

指向NULL的所有前进指针跨度都为0,因为他们没有连向任何及诶单。

-w761
-w766
-w759

4、后退指针
-w791
-w780

5.1.2 跳跃表

-w643
查找就是与下一个比较,如果比它大就继续向右 如果比它小就向下一层。
跳表和平衡树的比较:
-w679
范围查找、简单、内存少、不复杂。跳表就是
-w708
redis数据结构分析

5.2 跳跃表API

-w782

5.3 重点回顾

  • 跳跃表是有序集合的底层实现之一
  • redis的跳跃表是有zskiplist和zskiplistnode以及ziplist、zset实现的。
  • 每个跳跃表节点层高都是1-32的随机数
  • 同一个跳跃表中 有多个包含相同的分分值,用字典序排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值