目录

Redis单线程架构

⭐️前言⭐️

本小节主要围绕Redis的单线程模型展开

🍉欢迎点赞 👍 收藏留言评论

🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言

🍉博客中涉及源码及博主日常练习代码均已上传GitHub


📍内容导读📍

🍅单线程架构

Redis使用了单线程架构来实现高性能的内存数据库服务,本小节首先通过多个客户端命令调用的例子说明Redis单线程命令处理机制,接着分析Redis单线程模型为什么性能如此之高,最终给出为什么理解单线程模型是使用和运维Redis的关键。

🍅1.引出单线程模型

现在开启三个 redis-cli 客户端同时执⾏命令

在宏观角度上,三个客户端看起来是"并发"要求Redis去执行命令的,如下图所示:

但在微观角度,这些命令还是采用线性方式去执行的,只是原则上命令的执行顺序是不确定的,但一定不会有两条命令被同步执行,如下图所示:

所以也就是说,当多个请求同时到达Redis服务器,也是要在队列中排队,再等待redis服务器一个一个的取出里面的命令再去执行,微观上讲,redis服务器是串行/顺序执行这多个命令的,如下图所示模型:

🍅2.为什么单线程还能这么快?

这里的快,是相对于比如MySQL、Oracle之类的关系型数据库来讲的

通常来讲,单线程处理能力要比多线程差,那么为什么Redis使用单线程模型会达到每秒万级别的处理能力呢?可以将其归结于以下几点:

a. Redis访问内存,数据库则是访问硬盘

b. Redis的核心功能,比数据库的核心功能更简单

数据库对于数据的增删改查,都有更复杂的功能支持,这样的功能势必要花费更多的开销;而Redis干的活少,提供的功能相比于MySQL也是少了很多

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

Redis的每个基本操作,都是短平快的,就是简单操作一下内存数据,不是什么特别消耗CPU的操作

d. Redis在处理网络IO的时候,使用了epoll这样的IO多路复用机制

IO多路复用机制,就是通过一个线程来管理多个socket

针对TCP来说,服务器这边每次要服务一个客户端,都需要一个socket,一个服务器服务多个客户端,同时就有很多个socket,但是在同一时刻,只有少数socket是活跃的;所以就可以让一个线程来同时管理多个事情,前提是这几件事的交互不频繁,大部分时间都在等

就像我们去食堂买饭,如果想吃三个窗口的东西,我们只需要买了以后去买另一个东西,有一种东西做好了,窗口老板喊我一嗓子去拿就可以。

🍅3.弊端

虽然单线程给Redis带来很多好处,但还是有一个致命的问题:对于单个命令的执行时间都是有要求的。如果某个命令执行过长,会导致其他命令全部处于等待队列中,迟迟等不到响应,造成客户端的阻塞,对于Redis这种高性能服务来说是非常严重的,所以Redis是面向快速执行场景的数据库。


⭐️最后的话⭐️
总结不易,希望uu们不要吝啬你们的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
neoooo18 分钟前
Redis 缓存击穿、穿透、雪崩问题及解决方案
java·spring boot·redis
患得患失94921 分钟前
【后端】【django】【进阶】自定义管理器——封装常用查询
数据库·django·sqlite·models
朱雨鹏35 分钟前
大话Redis
数据库·redis
长安er1 小时前
异步编程与流水线架构:从理论到高并发
数学建模·架构·gui·多线程·异步·流水线·全息
Chiyamin1 小时前
字符与编码基础知识再研究
c++·架构
围巾哥萧尘1 小时前
「MCP建模操作」使用Blender MCP与Cursor完成3D建模的探索之旅🧣
数据库·代码规范
微臣愚钝1 小时前
【10】高效存储MongoDB的用法
数据库·mongodb
机巧咸鱼不会受伤1 小时前
UMI app.tsx 作用及使用场景
前端·架构
镜舟科技1 小时前
深入理解 Bitmap 索引:原理、场景与应用案例
大数据·数据库·数据分析
小涵2 小时前
【分布式】冰山(Iceberg)与哈迪(Hudi)对比的基准测试
大数据·数据库·分布式·阿里云·架构·iceberg·hudi