【Redis】单线程模型

Redis 单线程模式

Redis是一个单线程模型,但不意味着全部都是单线程,它还有多线程利用的地方,如网络IO复用

具体来了解下Redis单线程模型的工作原理,如果遇到了并发场景单线程又该如何处理?

重要问题:Redis虽然是单线程模型,但为什么效率这么高,速度那么快呢?

答:Redis的快是相对于MySQL,SQL Server这种关系型数据库来说的

  • Redis访问的是内存,数据库访问的是硬盘

  • Redis核心功能比数据库的简单且少,减少性能开销。

    数据库对于数据的一些增删查改,都有更复杂的功能支持,这些功能支持肯定会花费开销。如:数据库的插入有主键约束;查询功能时支持排序、分组、算表达式,多表联合查询等。

  • Redis单线程模型能避免多线程安全和不必要的多线程竞争开销

  • 处理网络IO时,++采用了epoll的IO多路复用机制++

这就引申出一个问题:什么是IO多路复用机制?epoll又是什么?

IO多路复用机制

本质上就是让一个线程管理多个socket。


对于TCP来说,每个客户端连接上服务器,那么服务器就会默认安排一个socket,通过socket来通信。

一台服务器上可能会有好多个客户端,那么就有很多个socket,++但是,这些socket每时每刻都在传输数据吗?++

其实,通常大部分的socket是闲置的,没有数据需要传输,同一时刻可能只有少部分的socket是活跃的。

另外,传统模型里,++Socket 确实是由专门的线程管理的++ 一个线程管理一个 Socket,这会导致线程的浪费。

++那么能不能把这些线程利用起来呢?++

所以就出现了IO多路复用,Socket 不再由独立线程管理 ,而是交给内核监控,程序将成千上万个 Socket "挂"在内核的 epoll 实例 上。一个线程通过调用 epoll_wait 就可以同时监听所有 Socket

用简单例子形象下他们两的区别那就是:

传统 IO 模式

想象一个餐厅,每个客人都配一名专职服务员。

  • 场景:客人点菜时需要思考,服务员就在旁边死等,直到客人点完菜。
  • 缺点:如果有 100 个客人,就得雇 100 个服务员。大部分服务员都在发呆,极其浪费人力。

IO 多路复用模式

餐厅这次只雇了一个服务员,每张桌子上还装了一个呼叫铃

  • 场景:客人想好了就按铃。服务员平时坐在前台喝茶(阻塞),铃声一响,他看一眼显示屏(就绪列表),就知道哪桌该上菜了,直接过去处理。
  • 优势:一个服务员就能有条不紊地服务几十桌客人,这就是 "多路" (多个连接) "复用" (共用一个线程)
相关推荐
一 乐16 分钟前
汽车租赁|基于SprinBoot+vue的汽车租赁管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·汽车·论文·毕设·汽车租赁管理系统
zandy101129 分钟前
衡石科技 NL2Metrics 技术深度解析(2026):ChatBI 准确度破局的关键路径
数据库·科技·oracle
Elastic 中国社区官方博客31 分钟前
Elasticsearch 如何通过 synthetic _id 和 Bloom filters 将时序存储降低 34%
大数据·数据库·elasticsearch·搜索引擎·serverless·全文检索·时序数据库
better_liang37 分钟前
每日Java面试场景题知识点之-如何设计分布式锁
java·redis·zookeeper·面试·分布式锁
一只鹿鹿鹿1 小时前
信息化项目管理规范(参考Word文件)
java·大数据·运维·开发语言·数据库
这个DBA有点耶1 小时前
多模融合数据库深度解析:关系、文档、向量、图如何统一?
数据库·自然语言处理·aigc·dba·改行学it
anew___1 小时前
《数据库原理》精要解读(三)—— SQL:与数据库对话的艺术
数据库·sql·oracle
KaiwuDB1 小时前
KWDB 3.2.0 版本发布,数据管理查询增强,安装部署体验全面升级
数据库
暴躁小师兄数据学院1 小时前
【AI大数据工程师特训笔记】第10讲:数据库用户、权限管理、数据库约束
大数据·数据库·笔记·sql·postgresql