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

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

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

5.1 跳跃表的实现

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



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

5.1.1 跳跃表节点


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

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

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

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



4、后退指针

5.1.2 跳跃表


查找就是与下一个比较,如果比它大就继续向右 如果比它小就向下一层。
跳表和平衡树的比较:

范围查找、简单、内存少、不复杂。跳表就是

redis数据结构分析

5.2 跳跃表API

5.3 重点回顾

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

你可能感兴趣的:(数据库,跳表,redis,skiplist,数据结构,数据库)