Redis中跳表的原理和实现

108 阅读1分钟

1.跳表概念

跳表(skiplist)是一个查询/插入/删除复杂度o(lIgn)的数据结构。 在查询上跟平衡树的复杂度一致,因此是替代平衡树的方案。在redis的zset,leveldb都有应用。

各种平衡树在工业界是广泛应用,帮助我们快速查找,插入数据,但其思想的复杂也让大家不是那么容易接触。跳表为节点设置了快速访问的指针,不同在一个个遍历,可以跨越节点进行访问,这也是跳表的名字的含义。

下面是跳表的数据结构

image.png

2.跳表如何构建

当插入一个数据时,随机获得这个节点的高度,每涨一层的概率为p,这个设置,一般为0.25或者0.5,层数越高的节点就越少。

3.如何搜索跳表

如上图所示,我们检索19这个值,遍历路径如下图所示

image.png 可以看到高层级的节点相当于一个快速通道,让搜索进行了节点的跳跃,而不是一个个的遍历。