📚️前言

🌟🌟🌟精彩导读

本次我们将全面剖析Redis的核心技术要点,包括其丰富的数据类型体系、高效的编码方式以及秒级响应的性能奥秘。对于渴望深入理解Redis底层机制的技术爱好者,这是一次难得的学习机会!

🔍 推荐扩展阅读

想了解更多数据库技术干货?欢迎访问小编的CSDN技术博客: 👉 GGBondlctrl-CSDN博客主页 👈 (持续更新分布式系统、中间件等深度技术文章)

💖 读者互动

您的每一个👍点赞、⭐收藏和✏️评论,都是我们持续输出优质技术内容的强大动力!期待在评论区看到您的见解~

目录

📚️前言

📚️1. 数据结构

📚️2.内部的编码方式

🚀2.1String类型

🚀2.2hash类型

 🚀2.3list类型

🚀 2.4set类型

🚀2.5zset类型

📚️3.redis的工作过程

🚀3.1单线程模型

🚀3.2redis效率

📚️4.总结


📚️1. 数据结构

可以发现,这里的数据结构即我们之前学习的数据结构,但是redis在底层上实现上述的数据结构时候,会进行特定的优化,达到节省空间时间的效果;

所以在内部的具体的实现的数据结构(编码方式)就会存在变化

在hash表中,redis在进行插入,查询时间复杂度就是1,但是背后的实现不一定就是哈希表(使用别的数据结构实现),但是保证时间复杂度为O(1)

📚️2.内部的编码方式

 具体的编码方式如下图所示:

数据结构内部编码
​string​raw
int
embstr
​hash​hashtable
ziplist
​list​linkedlist
ziplist
​set​hashtable
intset
​zset​skiplist
ziplist

再附一张文本格式的表格;

此设计体现了 Redis ​​空间与时间的平衡艺术​​:通过编码自动升级机制,在数据量增长时无缝切换数据结构,兼顾内存效率与操作性能。

🚀2.1String类型

这里涉及:raw,embstr,int

raw:最基本的字符串,长字符串的原始编码,在大于39字节的字符串,使用raw

embstr:小于等于39字节的字符串,适用比较短的字符串,针对短字符进行的特殊的优化

int:8个字节的长整型,类似与java的long

 这里我们可以举个例子:

set key 1
object encoding key

可以发现此时我们的value虽然是string类型,但是它的内部编码的方式就是int

其他两个编码方式如下所示:

这里注意了,当我们的整数过长,那么编码方式就会变成我们的raw的编码格式

当我们的字符串长度不是很长的情况下,就是embstr的编码方式~~~~

🚀2.2hash类型

这里涉及:hashtable,ziplist

hashtable:最基本的哈希表(reds内部的哈希表的实现)

ziplist:压缩列表,在特定情况下节省空间(在哈希表里的元素比较少的时候,优化成ziplist)

设置哈希表命令:

HSET zhangsan field 11 lisi field 12 wangwu field 13注意:key field value的形式

Redis 7.0 用 ​​listpack​​ 全面替代 ziplist 作为紧凑型数据结构,图中哈希键 zhangsan 满足压缩条件,因此展示为 listpack 而非 ziplist 或 hashtable 

特性ziplist (旧版)listpack (Redis 7.0+)
​数据更新​可能触发级联内存重分配独立节点更新,无连锁反应
​查询效率​O(n) 遍历O(n) 但常数项更低
​内存布局​前项指针导致反向遍历困难自包含节点(含本节点长度)
​最大元素数​hash-max-ziplist-entries=512hash-max-listpack-entries=512
​单元素最大长度​hash-max-ziplist-value=64hash-max-listpack-value=64
​安全性​级联更新可能引发性能波动无级联风险

如果此时key特别多,hash对应也特别多,那么每个hash不大的情况下,尽量去压缩后,让整体的占用的内存更小

为啥不用hashtable​

数据量过小(仅3个字段),使用 hashtable 会造成:

  • ​内存浪费​​:哈希表需预分配桶空间 + 指针开销
  • ​CPU效率低​​:计算哈希值的时间远高于直接遍历小数据集

 🚀2.3list类型

涉及的类型所示:linkedlist,ziplist

linkedlist:链表,占用空间大,执行效率高

ziplist:压缩列表,在特定情况下节省空间(在哈希表里的元素比较少的时候,优化成ziplist)

但是从redis中3.2开始,应投入了新的实现方式,quicklist兼顾了linkedList与ziplist

quicklist就是一个链表,每个元素又是一个ziplist把空间和效率都兼顾到

 lpush key4 1 2 3 4object encoding key4

执行结果如下图所示: 

 

🚀 2.4set类型

涉及的类型:hashtable,intset

hashtable:最基本的哈希表(reds内部的哈希表的实现)

intset:如果集合中都是整数,优化为intset

🚀2.5zset类型

涉及的编码类型:skiplist,ziplist

skiplist:跳表也是链表,每个节点上有很多个指针域,巧妙的搭配这些指针域的指向,可以做到从跳表上查询元素的时间复杂度是O(logN)

ziplist:压缩列表,在特定情况下节省空间(在哈希表里的元素比较少的时候,优化成ziplist)

📚️3.redis的工作过程

🚀3.1单线程模型

redis只使用一个线程来处理所有的命令请求;但是不是说redis服务器进程内部只有一个线程,当然还包括多线线程来处理我们的网络IO(redis是一个客户端服务器结构的程序)

注意:在多个请求同时到达我们的redis服务器,也是在队列中进行排队,等待redis从队列中一个一个取出来再执行,redis是串行来执行这些命令的

为什么redis可以使用单线程模型???

redis能够使用单线程模型,很好工作;主要原因是redis是核心业务逻辑,短平快;不消耗CPU资源,不吃多核!!!

弊端:某个时间操作占用过长,就会阻塞其他命令

🚀3.2redis效率

注意:这里的快,是在明确的对比上来说的;

1.redis是访问内存的,数据库访问硬盘

2.redis核心功能,比数据库的核心功能更简单

3.单线程模型,避免了一些不必要的线程竞争开销

4.处理网络IO时候,使用了epoll这样的IO多路复用机制(一个线程,可以管理多个socket)针对TCP来说,服务器每次要服务一个客户端,都需要给这个客户端安排一个socket进行通信

但是,这些socket都在无时无刻都在传输数据吗?

当然不是的, 很多情况下,每个客户端和服务器之间的通信没有那么频繁此时大多数socket大部分时间都是静默的,没有数据进行传输

注意:epoll的IO多路复用机制的前提是交互不频繁,大部分时间都在等待 

📚️4.总结

Redis核心技术解析:本文深入剖析Redis的高效实现机制。首先介绍Redis如何优化基础数据结构,通过灵活编码(如string类型采用raw/embstr/int编码)实现时空平衡;其次详解各数据类型(hash/list/set/zset)的底层实现,如ziplist/listpack等压缩结构在小数据量时的空间优化;然后解析Redis单线程模型的工作机制及其高效原因(内存操作、IO多路复用);最后指出Redis在核心业务上的"短平快"特性是其高性能关键。文章通过具体命令示例和编码转换条件,展现了Redis精巧的内部设计哲学。

🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!!


💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。

       😊😊  期待你的关注~~~

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

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

相关文章

Halcon —— 多种二维码检测

工业视觉实战:Halcon多类型二维码识别技术详解 在工业自动化场景中,兼容多种二维码类型是提高生产线灵活性的关键。本文将深入解析Halcon实现Data Matrix、QR Code和PDF417三种主流二维码的兼容识别方案,并重点解释核心算子参数。 一、多类型…

安卓vscodeAI开发实例

前言 前些天发现了一个巨牛的人工智能免费学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 目录 一、安卓开发基础与工具链革新 1.1 Android Studio的局限性分析 1.2 VSCode在移动开发中的崛起 1.3 跨平台开发工具链对比…

③通用搜索---解析FastAdmin中的表格列表的功能

深度解析FastAdmin中的表格列表的功能-CSDN博客文章浏览阅读25次。本文将FastAdmin框架的CRUD功能配置要点进行了系统梳理。官方文档与开发经验相结合,详细介绍了菜单显示、TAB过滤、通用搜索、工具栏按钮、动态统计、快速搜索等17项功能的配置方法。包括字段渲染&a…

DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_项目里程碑示例(CalendarView01_22)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

Python爬虫实战:获取Diesel电商数据并分析

1. 引言 在当今数字化时代,电商平台积累了海量的产品和用户数据。通过对这些数据的挖掘和分析,企业可以深入了解市场动态、消费者需求和竞争态势,从而制定更有效的营销策略和产品规划。Diesel 作为知名的时尚品牌,其在电商平台上的表现备受关注。本研究旨在通过 Python 爬…

Spring RestTemplate + MultiValueMap vs OkHttp 多值参数的处理

📌 Spring RestTemplate vs OkHttp:多值参数处理 一、MultiValueMap 与 FormBody 的差异 特性RestTemplate MultiValueMapOkHttp FormBody多值参数支持✅ 原生支持(add("key", "value") 自动追加)❌ 需显…

GelSight视触觉3D轮廓仪赋能Beomni人形机器人触觉遥测,开启人形机器人触觉应用新场景

在智能制造、航空航天等领域,传统机器人常面临操作精度不足、环境适应力弱等问题。GelSight触觉传感技术与Beomni人形机器人的融合,为这些场景提供了新可能 —— 通过亚微米级触觉感知能力,操作员可远程感知物体表面细节,在复杂环…

python设置word的字体颜色

这个错误是由于python-docx的RGBColor对象没有.rgb属性导致的。正确的属性访问方式是分别获取红、绿(g)、蓝(b)三个分量。以下是修复方案: 错误原因分析 RGBColor对象的结构如下: from docx.shared import RGBColorcolor RGBColor(255, 204, 51) pri…

推荐模型之GBDT-LR

一、概念 GBDT-LR模型由FaceBook(现在的Meta)团队于2014年在论文《Practial Lessons from Predicting Clicks on Ads at Facebook》中提出,目标是用于预测FaceBook的广告点击量(实际上广告和推荐领域很多算法模型都是共用的&#…

Java实现Excel图片URL筛选与大小检测

Java实现Excel图片URL筛选与大小检测 在数据处理场景中,我们常需筛选Excel中的图片URL。本文分享一个完整的Java方案,涵盖从读取图片URL到检测有效性、筛选大小,再到生成新Excel文件的全过程,同时讲解开发与优化过程,…

Java 实现后端调用 Chromium 浏览器无头模式截图的方案

Java 实现后端调用 Chromium 浏览器无头模式截图的方案 1. 使用 Playwright 优点:功能强大、支持多浏览器(Chromium/Firefox/WebKit)、支持异步操作。实现方式: 利用 Playwright 创建无头浏览器实例;使用 Java 的调度…

基于多模态文档解析与RAG的行业知识库构建技术指南

1. 技术背景 随着企业非结构化数据(扫描件、PDF、图像等)占比超过80%,传统关键词检索已无法满足精准问答需求。本文提出融合**计算机视觉(CV)与大语言模型(LLM)**的解决方案,关键技…

基于YOLOv11+PP-OCRv5深度学习的智能车牌检测与识别系统python源码+pytorch模型+评估指标曲线+精美GUI界面

【算法介绍】 智能车牌检测与识别系统借助当下前沿的 YOLOv11 算法以及 PP-OCRv5 算法,能够在复杂多样的环境场景中,快速且精准地达成实时车牌检测与识别任务。在现代交通管理领域,该技术意义重大,它能够推动涉及车辆识别与记录的…

[深度学习]全连接神经网络

目录 一、实验目的 二、实验环境 三、实验内容 3.1 完成解压数据集相关操作 3.2分析代码结构并运行代码查看结果 3.3修改超参数(批量大小、学习率、Epoch)并对比分析不同结果 3.4修改网络结构(隐藏层数、神经元个数)并对比分…

openEuler安装BenchmarkSQL

BenchmarkSQL是一个用于评估数据库性能的开源工具。它模拟TPC-C(Transaction Processing Performance Council)基准测试场景,该场景主要用于衡量数据库在处理大量并发事务时的能力。TPC-C测试场景模拟了一个典型的批发分销商的业务环境&#…

分库分表之优缺点分析

大家好,我是工藤学编程 🦉一个正在努力学习的小博主,期待你的关注实战代码系列最新文章😉C实现图书管理系统(Qt C GUI界面版)SpringBoot实战系列🐷【SpringBoot实战系列】Sharding-Jdbc实现分库…

【2025年超详细】Git 系列笔记-4 git版本号及git相关指令运用。

系列笔记 【2025年超详细】Git 系列笔记-1 Git简述、Windows下git安装、Linux下git安装_displaying 2e144 commits. adjust this setting in -CSDN博客 【2025年超详细】Git 系列笔记-2 github连接超时问题解决_2025访问github-CSDN博客 【2025年超详细】Git 系列笔记-3 Git…

图像特征检测算法SuperPoint和SuperGlue

SuperPoint 背景与概述 :SuperPoint 是一个自监督的全卷积神经网络,用于提取图像中的兴趣点及其描述子。它在 2018 年由 Magic Leap 提出,通过在合成数据集上预训练一个基础检测器 MagicPoint,然后利用同胚适应技术对真实图像数据…

nginx 和 springcloud gateway cors 跨域如何设置

在跨域资源共享(CORS)配置中,Nginx 和 API Gateway(如Spring Cloud Gateway、Kong等)是两种常见的解决方案,它们的配置逻辑和适用场景有所不同。以下是详细对比和配置示例: 一、核心区别 维度NginxAPI Gateway定位反向代理/Web服务器微服务流量入口配置位置基础设施层应…

电路笔记(信号):一阶低通RC滤波器 一阶线性微分方程推导 拉普拉斯域表达(传递函数、频率响应)分析

目录 RC 低通滤波器电路一阶线性微分方程推导拉普拉斯域表达(传递函数)传递函数 H ( s ) H(s) H(s)频率响应(令 s j ω s j\omega sjω)幅频特性:相位特性:Bode 图(线性系统频率响应&#x…