[Redis6]跳跃表(跳表)
跳跃表(跳表)
简介
有序集合在生活中比较常见,例如根据成绩对学生排名,根据得分对玩家排名等。对于有序集合的底层实现,可以用数组、平衡树、链表等。数组不便元素的插入、删除;平衡树或红黑树虽然效率高但结构复杂;链表查询需要遍历所有效率低。Redis采用的是跳跃表。跳跃表效率堪比红黑树,实现远比红黑树简单。
实例
对比有序链表和跳跃表,从链表中查询出51
- 有序链表
要查找值为51的元素,需要从第一个元素开始依次查找、比较才能找到。共需要6次比较。
- 跳跃表
从第2层开始,1节点比51节点小,向后比较。
21节点比51节点小,继续向后比较,后面就是NULL了,所以从21节点向下到第1层
在第1层,41节点比51节点小,继续向后,61节点比51节点大,所以从41向下
在第0层,51节点为要查找的节点,节点被找到,共查找4次。
从此可以看出跳跃表比有序链表效率要高
[Redis6]跳跃表(跳表)相关推荐
- Redis源码剖析(十一)跳表
在树形结构中,常见的平衡树有AVL树和红黑树,但是由于AVL树过于平衡,导致维护平衡所需的代价过大,使用的不多,不过其中几种旋转算法还是值得学习的.取而代之的是较为平衡的红黑树,STL中的map和se ...
- Redis 数据结构 :SDS、链表、字典、跳表、整数集合、压缩列表
文章目录 SDS 结构分析 内存策略 空间预分配 惰性空间释放 总结 链表 结构分析 总结 字典 结构分析 rehash 渐进式rehash 总结 跳表 结构分析 总结 整数集合 结构分析 升级 降级 ...
- 【恋上数据结构】跳表(Skip List)原理及实现
跳表(Skip List) 引出跳表 跳表介绍 跳表原理及实现 使用跳表优化链表 跳表基础结构 跳表的搜索 跳表的添加.删除 跳表的层数 跳表的复杂度分析 跳表 - 完整源码 数据结构与算法笔记:恋上 ...
- java 实现跳表(skiplist)及论文解读
什么是跳跃表 跳表由William Pugh发明. 他在论文 <Skip lists: a probabilistic alternative to balanced trees>中详细介 ...
- mysql 跳表 b 树_简单谈谈Mysql索引与redis跳表
摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...
- 查找、插入、删除都很快的数据结构(散列表vs红黑树vs跳表)
散列表 散列表的插入.删除.查找操作的时间复杂度可以做到常量级的 O(1),非常高效. 平衡二叉查找树(红黑树) 二叉查找树在比较平衡的情况下(红黑树是一种平衡二叉树),插入.删除.查找操作时间复杂度 ...
- mysql索引和redis比较_聊聊Mysql索引和redis跳表
摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...
- 面试官:为何Redis使用跳表而非红黑树实现SortedSet?
知道跳表(Skip List)是在看关于Redis的书的时候,Redis中的有序集合使用了跳表数据结构.接着就查了一些博客,来学习一下跳表.后面会使用Java代码来简单实现跳表. 什么是跳表 跳表由W ...
- redis的压缩列表和跳表,看这一篇文章就够了
说到redis,大家的第一印象就是它快,它接收到一个键值对操作后,能以微秒级别的速度找到数据,并快速完成操作.我们知道redis是内存数据库,所有的操作都是在内存上实现的,这是它快的一个重要原因,那么 ...
最新文章
- 牛客网:为什么不能将实数作为 HashMap 的 key?
- 安全漏洞“心脏出血”继续 原因是“丘比特”
- Flutter开发Flutter与原生OC、Java的交互通信-1(47)
- python pip 报错 Command “python setup.py egg_info“ failed with error code 1 解决方法
- 辨异 —— 不同的编程语言(编译型语言、解释型语言、动态语言、静态语言)...
- 布线管理的设计(一)
- Python——eventlet.greenpool
- 【1+X Web前端等级考证 】| 最新Web前端开发中级实操
- 洛谷P3097 - [USACO13DEC]最优挤奶Optimal Milking
- 变形金刚2影院版完整字幕
- 用HTML+CSS实现百度静态页面
- python练习题——文件的打开、读取、复写
- IA300加密狗使用
- [轻笔记] label smoothing(标签平滑)
- 威纶通触摸屏如何在报警的同时,显示出异常数据的当前值?
- FLASH按钮链接,flash按扭里加链接
- 路由传参说有几种方式
- 西工大机考《 现代设计方法》大作业网考
- 2020湖湘杯部分writeup
- 多边形裁剪|Sutherland-Hodgman
热门文章
- [转]2020年排名前20的基于SpringBoot搭建的开源项目,帮你快速进行项目搭建!
- [转]总结:Apache/Tomcat/JBOSS/Jetty/Nginx区别 .
- linux c之把最简单的字符串数据追加写入文件
- Android之获取设备的型号和手机厂商
- Android之发送短信后按钮(60秒)变灰色每隔一秒递减显示
- 【C语言简单说】四:常量
- php多个文件上传代码,PHP单文件上传类或多文件上传类源码
- python0表示剪刀_石头,纸,剪刀Python代码。帮助简化
- go 服务器 源码,LollipopGo开源游戏服务器框架--global服务器源码
- c语言十佳运动员有奖评选系统_2019年沃德十佳内饰解读