Redis线程模型

一、概述

Redis线程模型主要是基于Reactor模式开发的网络事件处理器,这个处理器被称为文件事件处理器(file event handler),也就是说Redis线程模型指的就是文件事件处理器。文件事件处理器是单线程模式运行的,所以也叫单线程模型。但是通过IO多路复用机制监听多个socket,可以实现高性能的网络通信模型,又可以跟内部其他单线程的模块进行对接,保证了redis内部的线程模型的简单性。

二、文件事件类型

文件事件有两种类型:读事件(AE_READABLE)、写事件(AE_WRITABLE)。
(1)AE_READABLE:主要指的是客户端发送到redis服务器的所有请求命令(包含get、set等等命令)时产生的事件。
(2)AE_WRITABLE:只要指的是redis执行完客户端发送的请求命令后,返回执行结果到客户端是产生的事件。

三、文件事件处理器组成部分

文件事件处理器结构包含4个部分:多个socket,IO多路复用程序,文件事件分派器,事件处理器(命令请求处理器、命令回复处理器、连接应答处理器)。
在这里插入图片描述
(1)多个scocket:文件事件就是对socket操作的抽象,每当一个socket 准备好执行连接accept、read、write、close等操作时,与操作相对应的文件事件就会产生。多个 socket 可能会并发产生不同的操作,每个操作又会生成对应的文件事件。
(2)I/O多路复用程序:负责各事件的监听(连接、读、写等),当有事件发生时,将对应事件放入队列中。
(3)文件事件分派器:负责接受I/O多路复用程序传递过来的文件事件,并根据文件事件关联的事件处理器,将该事件分派给对应的事件处理器去处理。
(4)事件处理器:

  1. 连接应答处理器:负责客户端的接入操作。
  2. 命令请求处理器:当客户端接入成功后,负责处理客户端发送的读、写等请求命令。
  3. 命令回复处理器:当处理完客户端发送的请求命令后,将执行的结果返回给客户端。
四、文件事件处理通信流程

在这里插入图片描述
(1)连接流程:
在这里插入图片描述

  1. 首先在redis启动初始化的时候,redis中的I/O多路复用程序会监听serverSocket并且将事件处理器中的连接应答处理器和AE_READABLE事件关联起来。
  2. 当客户端跟redis发起连接时,serverSocket会产生一个AE_READABLE事件,然后被I/O多路复用程序监听到后传递给文件事件分派器。
  3. 文件事件分派器再分配给redis初始化时与AE_READABLE事件关联的连接应答处理器去处理。
  4. 连接应答处理器完成与客户端的连接后,会创建一个与客户端一 一对应的socket,同时将这个socket的AE_READABLE事件跟命令请求处理器关联起来,后续该客户端的所有请求都是在这个socket上进行操作。我们可以把这个新建的socket叫作socket01,以便与其他客户端连接成功生成的socket进行区分,不同的客户端与serverSocket完成连接后都会创建一个与之一一对应的socket。

(2)命令执行流程:

在这里插入图片描述

  1. 客户端发送一个set key value命令到socket01。
  2. socket01会产生一个AE_READABLE(读事件)事件。
  3. I/O多路复用程序监听到socket产生的AE_READABLE事件。
  4. I/O多路复用程序将该事件放入到socket队列中。
  5. 文件事件分派器读取socket队列中的事件,将该socket中的命令交给与该事件关联的命令请求处理器去处理。
  6. 命令请求处理器读取socket01中的请求命令并执行完该命令后,会准备好需要返回给客户端的数据,并将socket01的AE_WRITABLE事件和命令回复处理器关联起来。
  7. 当客户端准备接收redis返回的数据时,会产生一个AE_WRITABLE事件,该事件被I/O多路复用程序监听到后放入socket队列中,再由文件事件分派器分配给该事件关联的命令回复处理器去处理。
  8. 命令回复处理器将待返回到客户端的数据写入到socket01中,写入完成之后会删除这个socket01的AE_WRITABLE事件和命令回复处理器的关联。
  9. socket01最终将命令处理的结果返回到客户端,完成一次命令的执行流程。
五、单线程模型的优缺点

优点:
(1)模型比较简单,所有的处理过程都在一个连接,避免多线程同步机制的开销。
(2)只用一个主线程来处理,可以有效的避免多线程上下文切换带来的损耗。
(3)实现上比较容易,可维护性强。
缺点:
(1)只有一个线程,连接处理和业务处理共用一个线程,无法充分利用CPU多核的优势。
(2)当流量比较大、读写事件比较耗时情况下,容易导致系统出现性能瓶颈。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值