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

【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.dtcms.com/a/202010.html

相关文章:

  • Pytorch分布式训练,数据并行,单机多卡,多机多卡
  • 深度学习中的正则化方法与卷积神经网络基础
  • HTB 赛季8靶场 - Puppy
  • 【MySQL】04.数据类型
  • PLC系统中开关量与模拟量信号解析
  • 【Java高阶面经】3.熔断机制深度优化:从抖动治理到微服务高可用架构实战
  • 使用 Qt Designer 开发
  • 第41天-Python+Qt四屏播放器开发指南
  • 第12天-Python+Qt5开发实战:10大经典案例与深度解析
  • Qt 控件发展历程 + 目标(1)
  • Visual Studio 制作msi文件环境搭建
  • Word 转 HTML API 接口
  • RK3568 OH5.1 源码编译及问题
  • 华为云鲲鹏型kC2云服务器——鲲鹏920芯片性能测评
  • LLM笔记(十)vLLM(1)PagedAttention论文笔记
  • 汇川PLC通过Profinet转ModbusTCP网关读取西门子PLC数据案例
  • 足式机器人经典控制常用的ROS库介绍
  • SpringBoot与GeoHash整合,实现骑手就近派单功能
  • 离线环境破局:聚客AI无外网部署Dify的依赖镜像打包与增量更新方案
  • 前端开发——前端样式BUG调试全指南2025终极版
  • 【web应用】前后端分离开源项目联调运行的过程步骤ruoyi
  • SCAU--平衡树
  • 武汉副市长李湛莅临指导 珈和展会精彩亮相引《武汉电视台》深度报道 以硬核科技赋能农业强链新范式获政府媒体“双重点赞”
  • springboot3+VUE3-(0)-环境搭建+jwt请求与回应
  • 深度学习-runner.run(data_loaders, cfg.workflow)内部执行过程
  • 物联网(IoT)智能项目全景指南:技术构架、实现细节与应用实践
  • 以太联 - Intellinet 闪耀台北 SecuTech 国际安全科技应用博览会
  • 【强化学习】深度强化学习 - Deep Q-Network(DQN)算法
  • JAVA虚拟机有义务保证<clinit>()方法的线程安全
  • onlyoffice 源码 调试说明 -ARM和x86双模式安装支持