Redis深度解析

news/2026/1/26 17:39:03/文章来源:https://www.cnblogs.com/philry/p/18831264

Redis数据结构之Zset

目录
     一、zset数据结构
     二、跳表skipList
         什么是跳表?
             1.跳表的查找
             2.跳表的插入
             3.跳表的删除
             4.跳表的更新
 
一、zset数据结构
    相比于set,sorted set 增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,还可以通过 score 的范围来获取元素的列表。
    zset有两种不同的实现,分别是zipList和skipList。
zipList:
满足以下两个条件:
    1)、[score,value]键值对数量少于128个;
    2)、每个元素的长度小于64字节;
skipList:
不满足以上两个条件时使用跳表(组合了hash和skipList)
    1)、hash用来存储value到score的映射,这样就可以在O(1)时间内找到value对应的分数;
    2)、skipList按照从小到大的顺序存储分数;
    3)、skipList每个元素的值都是[score,value]对
 
Redis 中 zset 不是单一结构完成,是跳表哈希表共同完成。
实现方式:Redis sorted set的内部使用HashMap和跳跃表(skipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
使用zipList的示意图如下所示:
使用跳表时的示意图:
zset 结构中,既支持按单个元素查询,又支持范围查询。
 
二、跳表skipList
什么是跳表?
    对链表进行改造,在链表上建索引,即每两个结点提取一个结点到上一级,我们把抽出来的那一级叫作索引。这种链表加多级索引的结构,就是跳表
跳表的特点:
    1)、由许多层结构组成。
    2)、每一层都是一个有序的链表。
    3)、最底层 (Level 1) 的链表包含所有元素。
    4)、如果一个元素出现在 Level i 的链表中,则它在 Level i 之下的链表也都会出现。
    5)、每个节点包含两个指针,一个指向同一链表中的下一个元素,一个指向下面一层的元素。
跳表的优点:
    跳表可以保证增、删、查等操作时的时间复杂度为O(logN),且维持结构平衡的成本比较低,完全依靠随机。而二叉查找树在多次插入删除后,需要Rebalance来重新调整结构平衡。
跳表的缺点:
    跳表占用的空间比较大(多级索引),其实就是一种空间换时间的思想。
1.跳表的查找
    跳表的查找会从顶层链表的头部元素开始,然后遍历该链表,直到找到元素大于或等于目标元素的节点,如果当前元素正好等于目标,那么就直接返回它。如果当前元素小于目标元素,那么就垂直下降到下一层继续搜索,如果当前元素大于目标或到达链表尾部,则移动到前一个节点的位置,然后垂直下降到下一层。
2.跳表的插入
    为跳表插入数据,首先需要找到插入的位置,然后执行插入操作。
可以通过图看一下插入的过程:
    如果我们不停的向跳表中插入元素,就可能会造成两个索引点之间的结点过多的情况。结点过多的话,我们建立索引的优势也就没有了。所以我们需要维护索引与原始链表的大小平衡,也就是结点增多了,索引也相应增加,避免出现两个索引之间结点过多的情况,查找效率降低。
    跳表是通过一个随机函数来维护这个平衡的,当我们向跳表中插入数据的的时候,我们可以选择同时把这个数据插入到索引里,那我们插入到哪一级的索引呢,这就需要随机函数,来决定我们插入到哪一级的索引中。
这样可以很有效的防止跳表退化,而造成效率变低。
3.跳表的删除
    1)、自上而下,查找第一次出现节点的索引,并逐层找到每一层对应的节点。O(logN)
    2)、删除每一层查找到的节点,如果该层只剩下1个节点,删除整个一层(原链表除外)。O(logN)
总体上,跳跃表删除操作的时间复杂度是O(logN)。
整个删除过程,可以简化理解为:先找到,断关联,删内存
4.跳表的更新
    当我们调用zadd方法时,如果对应的value不存在,那就是插入过程。如果这个value 已经存在了,只是调整一下 score 的值,那就需要走一个更新的流程。假设这个新的score 值不会带来排序位置上的改变,那么就不需要调整位置,直接修改元素的 score 值就可以了。但是如果排序位置改变了,那就要调整位置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1220087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年京东年货节1月25日开启!淘宝年货节1月19日开启!年货节开启时间红包口令满减优惠力度与整体节奏

京东年货节红包口令是京东搜【红包2000】【福利333】【福利800】随着春节(2026年农历新年为2月17日)临近,电商两大巨头纷纷启动年货采购大战。淘宝/天猫与京东分别在1月中旬至月底掀起一波优惠高潮:淘宝/天猫年货节…

富文本编辑器CKEDITOR图文混排的WORD图片示例?

企业后台文档管理功能集成方案(CKEditor插件化实现) 作为西安高新技术企业项目负责人,针对企业网站后台管理系统Word粘贴、文档导入、微信公众号内容粘贴需求,结合客户(党政/军工/金融/高校等)对安全性、兼…

9.网络工具nmap和traceroute、tracert

1、nmap2、traceroute、tracert 以上仅供参考,如有疑问,留言联系

RK3568平台YOLOv11模型部署教程:环境配置与端侧推理优化全流程解析

文章目录 【深度实战】RK3568平台YOLO11模型从零到部署完整指南 前言 技术架构概览 一、开发环境搭建 1.1 Anaconda环境配置 1.2 RKNN工具链安装 下载核心组件 安装依赖和工具包 1.3 PyTorch环境配置 二、数据集准备与标注 2.1 数据集结构设计 2.2 图像标注工具配置 标注操作流…

RK3568平台YOLOv11模型部署全流程实战:环境搭建、模型转换与性能优化解析

文章目录 【深度实战】RK3568平台YOLO11模型从零到部署完整指南 前言 技术架构概览 一、开发环境搭建 1.1 Anaconda环境配置 1.2 RKNN工具链安装 下载核心组件 安装依赖和工具包 1.3 PyTorch环境配置 二、数据集准备与标注 2.1 数据集结构设计 2.2 图像标注工具配置 标注操作流…

国防项目CKEDITOR粘贴地图截图的示例代码?

企业网站后台管理系统功能扩展项目记录 作为北京某国企的项目负责人,近期我负责的企业网站后台管理系统文章发布模块迎来了新的需求挑战。客户要求增加 Word 粘贴功能、Word 文档导入功能以及微信公众号内容粘贴功能(自动下载公众号文章图片并上传至服务…

动图制作超简单?在线图片合成GIF高效方法

做自媒体配图、电商主图、课件动图,或是职场做汇报素材时,常会需要把多张图片合成GIF动图,却总被在线图片合成的问题难住:要么工具操作繁琐,新手半天拼不好图;要么合成后GIF画质模糊、画面卡顿,还有的合成后…

GIF编辑零门槛,图片合成GIF工具5分钟上手方案

做自媒体配图、电商主图、课件动图,或是职场做汇报素材时,常会用到图片合成GIF的需求,却总因选不对图片合成GIF工具踩坑:要么工具操作繁琐,新手不会调整图片顺序和播放速度;要么合成后GIF画质模糊、画面卡顿断层&#…

社保卡照片怎么压缩?社保卡制卡证件照要求全解

社保卡申领、制卡上传照片时,很多人都卡在了照片环节:要么照片体积过大提交失败,要么手动改尺寸后比例失调,找工具压缩又怕画质变差,反复调整还是通不过社保系统的审核。社保卡制卡照片有明确的官方规格:背…

汽车制造CKEDITOR如何通过示例实现设计图粘贴?

企业级Word内容集成解决方案:信创环境全兼容方案 作为山东某集团企业的项目负责人,面对日益增长的政府项目需求,我针对Word内容集成这一关键需求进行了全面技术评估和方案设计。以下是符合信创要求的完整解决方案。 一、需求分析与技术挑战…

公务员报名图片大小压缩,照片怎么改才合规

公务员国考、省考报名上传照片时,很多考生都遇见过难题:照片体积过大提交失败,手动改尺寸后比例失调,找工具压缩又怕画质变差,反复调整还是通不过报名系统审核。公务员报名照片有统一官方规格:背景为纯白色…

Product Hunt 每日热榜 | 2026-01-26

1. Thumbfa.st 标语:在YouTube缩略图中使用Midjourney——每次都能看到你的脸 介绍:只需上传一张你的脸,获取灵感于任何YouTube缩略图,描述你的创意——AI会立刻为你生成出来。反复调整直到满意。费用仅为传统缩略图设计师的十分…

地下管网流量水质监测设备技术应用分析

一.引文 地下管网是城市水系统的核心组成部分,其流量与水质的稳定直接关系到城市供水排水安全、生态环境保护及民生保障。流量水质监测设备作为地下管网运行状态的感知载体,通过精准采集管网内水流数据与水质指标,为管网运维、故障…

【牛客网-小红的k次方】:避免大数问题

题目描述 小红拿到了一个长为 n 的数组 a,定义数组中所有元素的乘积为 x。小红想知道,最大的满足 x 是 30 的 k 次方的倍数(形式化的,x \mod 30^k 0)的 k 是多少? 题目链接:小红的k次方_牛客…

udev 规则

4. 选择特定设备(vid=10c4, pid=ea60)的完整规则文件bash# /etc/udev/rules.d/99-silabs-usb.rules # Silicon Labs CP2102 USB-UART桥接器# 规则1:设置设备文件权限(/dev/ttyUSB*) SUBSYSTEM=="tty",…

【开源推荐】AgentForce:当 GraphRAG 遇上 Agentic Workflow,打造下一代 AI 智能体平台 - TW

摘要:传统的 RAG 系统只能“检索”片段,往往缺乏全局观。今天推荐一个基于 Python 3.12+ 和 FastAPI 构建的开源项目 AgentForce。它融合了 GraphRAG(知识图谱增强)的认知能力与 Agentic Workflow(代理工作流)的…

2026年钉钉服务商推荐:基于多行业应用评价,针对数据孤岛与效率痛点精准指南

摘要 在数字化转型浪潮中,企业选择与自身业务深度契合的钉钉生态服务商,已成为提升组织协同效率、驱动业务创新的关键决策。面对市场上数量众多、能力各异的服务伙伴,决策者常陷入信息过载与评估标准缺失的困境,难…

2026年钉钉服务商推荐:基于多行业应用评价,针对定制开发与数据安全痛点精准指南

摘要 在数字化转型浪潮中,企业选择与自身需求高度匹配的钉钉生态服务商,已成为提升组织协同效率、实现业务在线化的关键决策。面对市场上数量众多、能力各异的服务伙伴,决策者常陷入信息过载与选择困难的境地,担忧…

2026年青岛全屋定制品牌推荐榜单:基于10大核心指标解析

当居住品质成为家庭生活的核心追求,全屋定制已从家居装修的“可选项目”升级为“品质刚需”。行业数据显示,2026年中国高端定制家居市场规模预计将持续增长,但市场服务商水平参差不齐,头部服务商与普通服务者的方案…

2026年制氮机厂家最新推荐:vpsa真空变压吸附式工业制氧机、中型工业制氧机、大型工业制氧站、小型工业制氧机选择指南

2026医药高纯度制氮机厂家推荐榜 - 合规与性能双优一、行业背景与选型痛点《2026中国医药制造业气体应用白皮书》数据显示,2026年国内医药行业氮气需求量同比增长18%,其中99.99%以上高纯度氮气占比超60%。在药品生产…