当前位置: 首页 > ai >正文

【Redis】跳表结构

目录

  • 1、背景
  • 2、跳表
    • 【1】底层结构
    • 【2】关键操作
    • 【3】redis使用跳表原因
    • 【4】特性

1、背景

redis中的跳表是一种有序数据结构,主要用于实现有序集合(zset)。跳表通过多级索引实现高效查找(平均O(logN)时间复杂度),同时保持插入和删除的高效性,下面就来讲解一下跳表(redis版本6.2.18)的底层结构。

2、跳表

【1】底层结构

跳表节点结构体如下:

typedef struct zskiplistNode {sds ele; //存储的元素double score; //排序分值,节点按score升序排列struct zskiplistNode *backward; //后向指针(单向链表,用于从尾到头遍历)struct zskiplistLevel {struct zskiplistNode *forward; //前向指针unsigned long span; //当前节点到下一个节点的跨度} level[]; //层级数组
} zskiplistNode;

跳表结构体如下:

typedef struct zskiplist {struct zskiplistNode *header, *tail; //指向跳表节点的头尾节点(头节点是虚拟节点,不存储数据)unsigned long length; //跳表中元素数量int level; //跳表实际使用的最高层数
} zskiplist;

【2】关键操作

跳表的关键操作有如下几种:

1、查找:从高层开始向右遍历,若下一节点分值大于目标值,则下降一层
2、插入:随机生成节点层数,更新前后指针和跨度
3、删除:类似插入的逆向操作

【3】redis使用跳表原因

redis使用跳表而不使用红黑树因为:

1、平衡性:相比红黑树,跳表实现更简单,且支持范围查询
2、性能:与红黑树的查找/插入均为O(logN),但跳表更适合并发场景(Redis6.0后支持多线程)

【4】特性

跳表的特性如下:

特性说明
数据结构用途实现有序集合的核心数据结构之一
时间复杂度查找/插入/删除:平均O(logN),最坏O(N)
空间复杂度平均O(N)(每个节点需存储多级指针)
层数控制节点层数随机生成,高层稀疏,低层密集
关键操作ZADD:插入节点并维护跳表结构- ZRANGE:按分值范围遍历- ZRANK:利用 span 计算排名
与红黑树相比优势:实现简单,天然支持范围查询- 劣势:空间占用略高
并发支持Redis 6.0+ 多线程模式下,跳表操作仍为单线程(由主线程处理)
http://www.xdnf.cn/news/7448.html

相关文章:

  • LSTM语言模型验证代码
  • springboot框架 集成海康ISUP-SDK 并实现 协议透传给设备下发指令!
  • 【鸿蒙开发】安全
  • centos 9 Kickstart + Ansible自动化部署 —— 筑梦之路
  • 软考软件评测师——数据库系统应用
  • spark-shuffle 类型及其对比
  • 新兴技术与安全挑战
  • Android7 Input(八)App Input事件接收器InputEventReceiver
  • 接口自动化可视化展示
  • CQF预备知识:Python相关库 —— 什么是 NumPy?
  • Linux网络基础全面解析:从协议分层到局域网通信原理
  • 【原创】ubuntu22.04下载编译AOSP 15
  • 杰里7006d日志分析
  • React 第四十四节Router中 usefetcher的使用详解及注意事项
  • form-create-designer中$inject参数的数据结构及各项属性说明
  • 软考中级软件设计师——计算机网络 IP地址与子网掩码相关题型
  • Index-AniSora模型论文速读:基于人工反馈的动漫视频生成
  • 游戏引擎学习第299天:改进排序键 第二部分
  • 小白的进阶之路系列之二----人工智能从初步到精通pytorch中分类神经网络问题详解
  • Linux 的 TCP 网络编程 -- 回显服务器,翻译服务器
  • Pandas:Series和DataFrame的概念、常用属性和方法
  • Wan2.1 文生视频 支持批量生成、参数化配置和多语言提示词管理
  • matlab慕课学习3.5
  • 《决策科学与艺术》No1: 决策树:概念、原理、发展历史、特点及应用
  • 打造高效数据处理利器:用Python实现Excel文件智能合并工具
  • ETL 数据集成与大数据技术的深度剖析
  • 【[特殊字符] Vue 3 实现动态加载子组件并缓存状态完整指南】
  • HTTP/HTTPS与SOCKS5协议在隧道代理中的兼容性设计解析
  • 企业级 Hosts 自动化管理实战:基于 HTTP 检测的高可用域名解析方案
  • CentOS Stream 9 中部署 MySQL 8.0 MGR(MySQL Group Replication)一主两从高可用集群