目录

一 Redis 是单线程还是多线程?

二 为什么单线程的 Redis 性能很高?

三 什么是 IO 多路复用技术?

四 Redis 6.0 开始引入多线程?


一 Redis 是单线程还是多线程?

这个问题可以一分为二:

Redis 是单线程,是因为 Redis 使用文件事件分派器来处理事件队列,且该文件事件分派器是单线程的,所以 Redis 才叫做单线程的模型。

Redis 是多线程,是因为持久化、异步删除、集群数据同步等操作都是由数据读写线程之外其他线程执行的,所以 Redis 也可以叫做多线程模型。

之所以大家都说是单线程,是因为单线程的 Redis 性能很高。

二 为什么单线程的 Redis 性能很高?

1 Redis 的数据都是存储在内存中,内存操作很快。

2 Redis 使用 IO 多路复用技术来处理并发事件。

内存这个很容易理解,不多说,接下来我们详细分析一下 IO 多路复用技术。

三 什么是 IO 多路复用技术?

如图为 Redis 的客户端与服务端整体事件处理流程图:

流程图主要由以下几部分组成:

  • 多路 Socket。
  • IO 多路复用程序。
  • 事件队列。
  • 文件事件分派器。
  • 多类型事件处理器。

其中 IO 多路复用程序,监听多个 Socket。

以一个 Socket 的多种事件类型举例说明。

1 建立连接事件

客户端向服务端建立连接,IO 多路复用监听到建立连接的请求事件后,将请求事件写入队列,文件事件分派器从队列中获取请求事件,交给连接应答处理器处理。

连接应答处理器与客户端创建一个 Socket。

2 写请求事件

客户端发送一个 set key value 的请求,IO 多路复用监听到写事件后,将事件写入队列,文件事件分派器从队列中获取请求事件,交给命令请求处理器处理。

命令请求处理器在内存实现 set key value 的操作。

3 返回结果事件

客户端准备好收到结果,IO 多路复用监听到返回结果事件后,将事件写入队列,文件事件分派器从队列中获取请求事件,交给命令回复处理器处理。

命令回复处理器返回结果。

四 Redis 6.0 开始引入多线程?

Redis 的多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程。 之所以这么设计是不想 Redis 因为多线程而变得复杂,需要去控制 key、lua、事务、LPUSH/LPOP 等等的并发问题。

系统的性能瓶颈也主要在网络 I/O 操作上;而 Redis 引入多线程操作也是出于性能上的考虑,对于一些大键值对的删除操作,通过多线程非阻塞地释放内存空间(释放操作不会阻塞网络IO读写,因为网络 IO 读写与释放的命令执行不是同一个线程)也能减少对 Redis 主线程阻塞的时间,提高执行的效率。

09-Redis IO 多路复用相关推荐

  1. Redis IO 多路复用机制

    Redis IO 多路复用机制 基于linux select/epoll select:最大支持1024个文件描述符,在描述符较多情况下性能较差,水平触发 poll:poll与select基本相同,只 ...

  2. Redis IO多路复用理解

    IO多路复用在Redis中的应用 Redis 服务器是一个事件驱动程序, 服务器处理的事件分为时间事件和文件事件两类. 文件事件:Redis主进程中,主要处理客户端的连接请求与相应. 时间事件:for ...

  3. io多路复用的原理和实现_彻底理解 IO 多路复用实现机制

    本文作者:何建辉(公众号:org_yijiaoqian) 点赞再看,养成习惯,微信搜一搜[一角钱技术]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy已收录,有 ...

  4. Redis源码剖析(二)io多路复用函数及事件驱动流程

    作为服务器监听客户端请求的方法,io多路复用起到了不可忽略的作用,利用io复用监听的方法叫Reactor模式,在前一篇也提到过,使用io复用是现在常用的提高并发性的方法,而且效果显著. 通常io多路复 ...

  5. redis 十一. IO 多路复用

    目录 一. 基础 select poll epoll 二. redis 与多路复用 一. 基础 首先知道一下五种io模型有个概念 Blocking IO: 阻塞IO NoneBlockin IO: 非 ...

  6. Redis单线程还是多线程?IO多路复用原理

    目录 专栏导读 一.Redis版本迭代 二.Redis4.0之前为什么一直采用单线程? 三.Redis6.0引入多线程 四.Redis主线程和IO线程是如何完成请求的? 1.服务端和客户端建立sock ...

  7. 从开源框架细节的来分析网络模块的封装丨网络模块|Redis|skynet|多线程|单线程|reactor多核实现|IO多路复用

    从开源框架细节的来分析网络模块的封装 视频讲解如下: 从开源框架细节的来分析网络模块的封装丨网络模块|Redis|skynet|多线程|单线程|reactor多核实现|IO多路复用丨c/c++linu ...

  8. Redis的IO多路复用原理

    什么是阻塞,非阻塞,异步同步,select,poll,epoll?今天我们用一遍文章解开这多年的迷惑. 首先我们想要通过网络接收消息,是这样的一个步骤. 用户空间向内核空间请求网络数据 内核空间把网卡 ...

  9. IO模式和IO多路复用

    前言 前天看redis相关的博文里面提到了epoll,就搜了一下,发现这篇文章 Linux IO模式及 select.poll.epoll详解,讲的很好,收获很大.这里根据自己的理解总结一下. IO模 ...

  10. 基于epoll实现一个IO多路复用的回声服务器

    任务: 实现一个TCP server的回声服务器,功能是将客户端发送的消息原样返回,应用epoll处理事件循环实现IO多路复用.借此任务理解IO多路复用应用的开发模式. 参考资料: http://ma ...

最新文章

  1. MYSQL数据库性能调优之六:备份
  2. win10浏览器_Win10系统中ie浏览器的证书错误应该如何解决?
  3. 论文解读 | 基于递归联合注意力的句子匹配模型
  4. 更改hadoop native库文件后datanode故障
  5. cocostudio 实现换行功能的label (文本区) lua
  6. 如何检测本计算机耗电量,如何查看电脑耗电量?鲁大师查看电脑使用功率的方法...
  7. ASP.NET MVC 阻止通过URL访问服务器上的静态资源文件
  8. SpringMVC处理Json、文件上传、拦截器
  9. 初识python你应该知道的6个知识点
  10. x86汇编指令:EIP、ESP、EBP
  11. oracle exp-00011的解决办法
  12. 大作家超级写作软件_大作家都是极度自律的人,你也可以
  13. uniapp小程序体验版-白屏现象
  14. 在京东工作是一种什么样的体验
  15. 【raft】学习五:日志结构raftLog
  16. 聚观早报 | 货拉拉入局跑腿业务;苹果任命首位首席人力资源官
  17. 大流量的网站如何解决访问量的问题
  18. 微服务学习总结5(Ocelot+Polly+Consul)
  19. 再见Dubbo,不学会新的Java开发框架。你以为阿里P7能这么好拿?
  20. 阿里云ECS mysql安装和远程连接

热门文章

  1. 泰勒公式(狗3定理-张宇)【结合例题】
  2. 车载双目ADAS(八):双目相机对图像画质要求
  3. 【CEF】《CEF 桌面软件开发实战》笔记-汇总
  4. Python实现壁纸浏览与设置
  5. 如何让计算机课变得有趣,兴趣教学法让计算机课活起来
  6. 新手必看的jQuery参考手册主要API
  7. Cannot read property 'parentElement' of undefined问题解决
  8. 三星android pay,Samsung Pay Android Download APK
  9. 三星s9android10,三星手机升级难?Android 10升级时间表出炉
  10. 带你玩转Visual Studio——单元测试