1、首先redis是单线程的,为什么redis会是单线程的呢?

  1. 从redis的性能上进行考虑,单线程避免了上下文频繁切换问题,效率高;
  2. 从redis的内部结构设计原理进行考虑,redis是基于Reactor模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器(file event handler)。而这个文件事件处理器是单线程的,所以才叫redis的单线程模型,这也决定了redis是单线程的。

2、聊一聊redis的单线程模型构造部分?

redis单线程模型中最为核心的就是文件事件处理器

而文件事件处理器结构包含5个部分,其实真正包含为4个部分(不包含socket队列,加上主要方便后面理解):多个socket、IO多路复用程序、socket队列、文件事件分派器、以及事件处理器。而事件处理器又分为3个部分为:连接应答处理器、命令请求处理器、命令回复处理器。如图:

3、redis单线程模型的大致工作流程及原理

客户端与redis进行通信大致流程:
1、首先在redis启动初始化的时候,redis会先将事件处理器中的连接应答处理器和AE_READABLE事件关联起来;
2、如果客户端向redis发起连接,会产生AE_READABLE事件(步骤A),产生该事件后会被IO多路复用程序监听到(步骤B),然后IO多路复用程序会把监听到的socket信息放入到队列中(步骤C),事件分配器每次从队列中取出一个socket(步骤D),然后事件分派器把socket给对应的事件处理器(步骤E)。由于连接应答处理器和AE_READABLE事件在redis初始化的时候已经关联起来,所以由连接应答处理器来处理跟客户端建立连接,然后通过ServerSocket创建一个与客户端一对一对应的socket,如叫socket01,同时将这个socket01的AE_READABLE事件和命令请求处理器关联起来。

4、当客户端向redis发生请求时(读、写操作),首先就会在对应的socket如socket01上会产生AE_READABLE事件(步骤A),产生该事件后会被IO多路复用程序监听到(步骤B),然后IO多路复用程序会把监听到的socket信息放入到队列中(步骤C),事件分配器每次从队列中取出一个socket(步骤D),然后事件分派器把socket给对应的事件处理器(步骤E)。由于命令处理器和socket01的AE_READABLE事件关联起来了,然后对应的命令请求处理器来处理。这个命令请求处理器会从事件分配器传递过来的socket01上读取相关的数据,如何执行相应的读写处理。操作执行完之后,redis就会将准备好相应的响应数据(如你在redis客户端输入 set a 123回车时会看到响应ok),并将socket01的AE_WRITABLE事件和命令回复处理器关联起来。

5、当客户端会查询redis是否完成相应的操作,就会在socket01上产生一个AE_WRITABLE事件,会由对应的命令回复处理器来处理,就是将准备好的相应数据写入socket01(由于socket连接是双向的),返回给客户端,如读操作,客户端会显示ok。

6、如果命令回复处理器执行完成后,就会删除这个socket01的AE_WRITABLE事件和命令回复处理器的关联。
7、这样客户端就和redis进行了一次通信。由于连接应答处理器执行一次就够了,如果客户端在次进行操作就会由命令请求处理器来处理,反复执行。

了解redis的单线程模型工作原理?一篇文章就够了相关推荐

  1. 搞定 WeakHashMap 的工作原理一篇文章就够了!!!

    文章目录 一.什么是 WeakHashMap? 二.为什么需要 WeakHashMap? 三.WeakHashMap 的例子 四.WeakHashMap 的使用场景 五.WeakHashMap 的数据 ...

  2. Redis主从复制下的工作原理

    Redis主从复制下的工作原理 Redis主从复制的配置十分简单,它可以使从服务器是主服务器的完全拷贝.需要清楚Redis主从复制的几点重要内容: 1)Redis使用异步复制.但从Redis 2.8开 ...

  3. MySQL优化-一篇文章就够了(转发加收藏吧)

    关注我,一个仍存梦想的屌丝程序员,每天为你分享高质量编程博客. 回复 "代金券"  免费获取腾讯云和阿里云代金券 前言 说起MySQL的查询优化,相信大家收藏了一堆:不能使用SEL ...

  4. Android:学习AIDL,这一篇文章就够了(下)

    前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...

  5. 全面认识MOS管,一篇文章就够了

    基础知识中 MOS 部分迟迟未整理,实际分享的电路中大部分常用电路都用到了MOS管, 今天势必要来一篇文章,彻底掌握mos管! ...更新:为什么常在MOS管GS并联电阻? ...更新:为什么要在MO ...

  6. 全面认识二极管,一篇文章就够了

    电子设计基础元器件 二极管,小小二极管,大大用途. ... 矜辰所致 目录 前言 一.二极管基础知识 1.1 什么是二极管 1.2 二极管的组成 1.3 二极管的原理 二.二极管特性 2.1 伏安特性 ...

  7. 集成Android免费语音合成功能(在线、离线、离在线融合),有这一篇文章就够了(离线)

    原址 集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(在线) 集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(离在线融合)     ...

  8. 关于VR产品的前世今生,看这一篇文章就够了

    关于VR产品的前世今生,看这一篇文章就够了(转) 文/胡勇 即使最富质疑精神最冷静的人也无法漠视现在的 VR/AR 掀起的狂潮,这个从科技圈蔓延到实业界最后席卷大众的想象力的狂欢正以前所未有的态势改变 ...

  9. 如何使用 Maven 来创建项目(一篇文章就够了)

    如何使用 Maven 来创建项目(一篇文章就够了) 1. Maven 简介 1. 简介 2. 项目构建 3. 项目构建工具 2. Maven 的四大特性 1. 依赖管理系统 版本号规范 2. 多模块构 ...

最新文章

  1. YOLOv5 报错:“NotImplementedError: Could not run ‘torchvision::nms‘ with arguments from the ‘CUDA‘ back
  2. Exynos4412 IIC 总线驱动开发相关问题总结
  3. 网站防盗链的配置之apache
  4. Java的GUI学习六(Action事件)
  5. python数独游戏源代码_Python数独游戏源代码
  6. 常见的应用层协议都有哪些?【面试官可能会问系列】
  7. html img动态设置图片大小,Js动态设置Img大小
  8. 大学计算机试题深圳大学,深圳大学期末考试试卷参考答案.doc
  9. 智能电视无法进入服务器,三星智能电视无法连接到服务器怎么办
  10. latex添加代码注释_在代码中添加注释:好的,坏的和丑陋的。
  11. linux通过修改/etc/hosts文件 添加IP地址与域名的映射
  12. STM32第九课(Input Capture, HAL)
  13. 爬取boss直聘岗位数据进行数据分析
  14. 大数据分析——暑期黑马《延禧攻略》到底有多火!
  15. [附源码]java毕业设计学习资源共享与在线学习系统
  16. 孙陶然:不要轻易开始创业
  17. Vulnhub-Zico2靶机实战
  18. 留数定理matlab,第五章 留数定理习题及其解答
  19. 科技企业上市就是一大悲剧(下)
  20. 初识Json浅扯ajax

热门文章

  1. Java程序读取手机GPRS内容
  2. AutoHotKey (AHK) 自定义快捷键
  3. IDEA2022同一个类并行同一个main方法怎么操作?
  4. 服务器监控系统哪家性价比高,4G内存的服务器怎么样?性价比高吗?集光安防的这一款怎么样?...
  5. Tomcat 禁用管理界面
  6. 【苹果推软件】安装OS imessage和faceTime
  7. 【第二期】电商分布式前沿springboot接口服务之阿里巴巴分页-Array-专题视频课程...
  8. 【东华医为的实习与卫宁的入职工作】
  9. matlab通信仿真mimo,MIMO通信系统天线选择算法仿真
  10. 17年寒假阅读页面索引