【Redis】Redis中的跳跃表概论

简易实现:
Redis中跳跃表的实现

光看Redis设计与实现中,跳跃表这一个数据结构还是有许多不明白的概念的,比如:每一个zskiplistNode的层(level)为什么指向没有什么规律?
这个问题其实有一个前置概念,跳跃表是什么。知道了跳跃表是什么之后,才能明白Redis中是怎么实现跳跃表的。

代码级实现:
SkipList的原理与实现,如果看Redis设计与实现过后,有一些疑问的话,可以先看这一篇文档。其实Redis中的层概念,用多级索引来理解会清晰一些。

如果跳跃表中所有节点的层数都是一级的话,这个跳跃表就退化成了一个有序单链表。对于这个有序单链表来说,要找到一个固定的值,除了遍历别无他法。如果说是,这个数据结构不是链表而是数组,那我们可以使用二分法来进行对数级别的优化,使得时间复杂度降低到O(logN)级别的。在这个概念之上,那我们在每一个二分节点上,先建立一个层的概念,可以直接通过一次二分达到,不是就将算法复杂度减半了。

那这个层数到底是怎么决定?文档中提到是使用了幂次定律随机生成一个介于1和32之间的值作为层的数量。幂次定律规定,越大的数出现的概率越小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值