redis 中的跳跃表(跳表)

本文探讨了跳跃表在Redis中的应用,对比了其与普通有序链表的效率,重点介绍了跳跃表的工作原理和在Zset和集群节点中的作用。通过实例说明,展示了跳跃表如何通过多级链接快速定位,显著提高查找速度。
摘要由CSDN通过智能技术生成

目录

一、简介

跳跃表效率体现:

解释


一、简介

        跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他的几点指针,从而达到快速访问队尾目的。跳跃表的效率可以和平衡树相媲美了,最关键是它的实现相对于平衡树来说,代码的实现上简单很多。

        跳跃表在 Redis 中使用不是特别广泛,只用在了两个地方。一是实现有序集合键(Zset),二是集群节点中用作内部数据结构        

有序集合在生活中比较常见,例如根据成绩对学生排名,根据得分对玩家排名等。对于有序集合的底层实现,可以用数组、平衡树、链表等。数组不便元素的插入删除;

平衡树或红黑树虽然效率高但结构复杂;

链表查询需要遍历所有效率低

Redis采用的是跳跃表。跳跃表效率堪比红黑树,实现远比红黑树简单

跳跃表效率体现:

普通有序列表:

跳跃表: 

解释

假设同时寻找51节点,普通有序链表需要遍历6次才能知道51。

而跳跃表则是从最上层开始寻找,1节点比51节点小,向后比较。
21节点比51节点小,继续向后比较,后面就是NULL了,所以从21节点向下到第1层
在第1层,41节点比51节点小,继续向后,61节点比51节点大,所以从41向下
在第0层,51节点为要查找的节点,节点被找到,共查找4次
'
从此可以看出跳跃表比有序链表效率要高。
 

好了,这次的文章就到这里,喜欢的同学可以点赞收藏,遇到问题,可以评论,或者留言,我一定会第一时间给到回馈,感谢观看!!

注:本文为本人学习时心得分享,有讲错或者需要改正的地方,请指正,我会虚心接受

Redis 中的 zset 和跳表(Skip List)都是用于存储有序集合的数据结构,它们都提供了一种高效的方式来存储键值对,并保持元素按照值的顺序排列。然而,它们之间存在一些关键的区别: ### Redis 中 ZSet 的特性 ZSet 在 Redis 内部实现了通过跳跃(Skip List)的数据结构来存储数据,它支持以下功能: 1. **唯一性**:每个成员必须是唯一的,不能有重复的成员。 2. **排序**:成员按照分数(score)大小排序。 3. **范围查询**:可以快速地根据分数区间检索出成员列。 4. **添加、删除操作**:插入和移除操作也相对高效。 ### 跳跃(Skip List) 跳表是一种概率性平衡查找树,其特征包括: - **多级索引**:每一层都有一个指向下一个节点的指针。低层级的节点总是高于上一层的对应节点,形成“跳跃”效果,提高了搜索效率。 - **随机化**:节点的高度是随机生成的,通常情况下高度较低,只有少数节点达到较高的层数。 - **动态调整**:新增节点时,可能会导致整个跳表的高度发生变化,这需要相应地调整所有受影响的节点的高度。 ### Redis 中 ZSet 与跳表的关系 尽管 ZSet 使用了跳表作为底层数据结构,但这并不意味着它们直接等同于跳表Redis跳表进行了优化和封装,使其更适合在内存数据库环境下的使用,例如: - **高并发访问**:跳表能够提供良好的并发访问性能,尤其是在读操作密集的场景下。 - **内存效率**:Redis 设计时考虑到内存限制,因此对于数据结构的选择和管理都非常注重内存占用和访问速度的平衡。 - **功能性增强**:除了基本的查找、插入、删除外,Redis 的 ZSet 还提供了更多的高级功能,如计算区间内的元素数量、平均值、最大值、最小值等统计信息。 总结起来,Redis 中的 ZSet 实际上是一个高度优化和封装了跳表特性的数据结构,旨在满足特定应用场景的需求,如实时分析、计数排名等场景,在保证高性能的同时还提供了丰富的API和功能集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值