千家信息网

redis数据结构中跳跃表的示例分析

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章将为大家详细讲解有关redis数据结构中跳跃表的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。跳跃表定义:跳跃表(skiplist)是一种有序数据结
千家信息网最后更新 2025年01月24日redis数据结构中跳跃表的示例分析

这篇文章将为大家详细讲解有关redis数据结构中跳跃表的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

跳跃表定义:

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

跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。

跳跃表使用场景:

Redis使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员(member)是比较长的字符串时,Redis就会使用跳跃表来作为有序集合键的底层实现, 和链表、字典等数据结构被广泛地应用在Redis内部不同,Redis只在两个地方用到了跳跃表,一个是实现有序集合键,另一个是在集群节点中用作内部数据结构,除此之外,跳跃表在Redis里面没有其他用途。

跳跃表构成:

Redis的跳跃表由redis.h/zskiplistNode和redis.h/zskiplist两个结构定义。

zskiplistNode结构用于表示跳跃表节点:

•层(level):节点中用L1、L2、L3等字样标记节点的各个层,L1代表第一层,L2代表第二层,以此类推。每个层都带有两个属性:前进指针和跨度。前进指针用于访问位于表尾方向的其他节点,而跨度则记录了前进指针所指向节点和当前节点的距离。在上面的图片中,连线上带有数字的箭头就代表前进指针,而那个数字就是跨度。当程序从表头向表尾进行遍历时,访问会沿着层的前进指针进行。•后退(backward)指针:节点中用BW字样标记节点的后退指针,它指向位于当前节点的前一个节点。后退指针在程序从表尾向表头遍历时使用。•分值(score):各个节点中的1.0、2.0和3.0是节点所保存的分值。在跳跃表中,节点按各自所保存的分值从小到大排列。•成员对象(obj):各个节点中的o1、o2和o3是节点所保存的成员对象。

zskiplist结构:用于保存跳跃表节点的相关信息,比如节点的数量,以及指向表头节点和表尾节点的指针等等。

•header:指向跳跃表的表头节点。•tail:指向跳跃表的表尾节点•level:记录目前跳跃表内,层数最大的那个节点的层数(表头节点的层数不计算在内)•length:记录跳跃表的长度,也即是,跳跃表目前包含节点的数量(表头节点不计算在内

跳跃表展示图:
zskiplistNod 结构详细介绍:

•结构定义:

跳跃表节点的level数组可以包含多个元素,每个元素都包含一个指向其他节点的指针,程序可以通过这些层来加快访问其他节点的速度,一般来说,层的数量越多,访问其他节点的速度就越快

查询遍历过程:

•1)迭代程序首先访问跳跃表的第一个节点(表头),然后从第四层的前进指针移动到表中的第二个节点。•2)在第二个节点时,程序沿着第二层的前进指针移动到表中的第三个节点。•3)在第三个节点时,程序同样沿着第二层的前进指针移动到表中的第四个节点。•4)当程序再次沿着第四个节点的前进指针移动时,它碰到一个NULL,程序知道这时已经到达了跳跃表的表尾,于是结束这次遍历。

举个查询例子:

假如要查询 数值为3.0的位置,从头节点出发遍历到3.0, 沿途经历的层:查找的过程只经过了一个层,并且层的跨度为3,所以目标节点在跳跃表中的位置为3。是不是很快!

zskiplist 结构详细介绍:

•结构定义:

通过使用一个zskiplist结构来持有这些节点,程序可以更方便地对整个跳跃表进行处理,比如快速访问跳跃表的表头节点和表尾节点,或者快速地获取跳跃表节点的数量(也即是跳跃表的长度)等信息

跳跃表常见api

关于"redis数据结构中跳跃表的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

节点 指针 结构 程序 表头 指向 有序 数据 数据结构 数量 元素 跨度 移动 两个 二层 代表 分值 成员 篇文章 查询 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 水滴互联网科技水滴筹上市公司 大学生网络安全知识论文 德惠智能网络技术服务口碑推荐 徐工集团软件开发师怎么样 中国网络安全委员会 能查出网络安全运维的小程序 软件开发信息管理系统设计论文 云服务器需要自己建数据库吗 企业财务网络安全案例分析 徐州有软件开发企业吗 您不能在安全服务器上玩 诛仙手游情谊永恒服务器 网络安全第一条是什么 王者荣耀用什么软件开发 创邻数据库发展前景 打印机 服务器脱机 加强网络安全现场检查 网络安全装置密码咋查 网络安全与运维工作好找吗 数据合规与网络安全 dnf数据库排行 研究网络安全技术 华山租房软件开发 武汉代办网络安全服务资质 大华软件开发怎么样 应用服务器关了怎么办 福建互联网软件开发销售 互联网科技平台同城 电话 浙江软件开发驻场需要多少钱 外包软件开发的洽谈流程
0