多个socket IO多路复用程序 socket队列 文件事件分派器 事件处理器:连接应答处理器、命令请求处理器、命令回复处理器
redis 单线程模型中最为核心的就是文件事件处理器
而文件事件处理器结构包含5个部分,其实真正包含为 4 个部分(不包含 socket 队列,加上主要方便后面理解):多个 socket、IO多路复用程序、socket 队列、文件事件分派器、以及事件处理器。而事件处理器又分为3个部分为:连接应答处理器、命令请求处理器、命令回复处理器。如图:
客户端与redis进行通信大致流程:
1、首先在 redis 启动初始化的时候,redis 会先将事件处理器中的连接应答处理器和 AE_READABLE 事件关联起来;
2、如果客户端向 redis 发起连接,会产生 AE_READABLE 事件(步骤A),产生该事件后会被 IO多路复用程序监听到(步骤B),然后 IO 多路复用程序会把监听到的 socket 信息放入到队列中(步骤C),事件分配器每次从队列中取到一个 socket (步骤D),然后事件分派器把 socket 给对应的事件处理器(步骤E)。由于连接应答处理器和 AE_READABLE 事件在 redis 初始化的时候已经关联起来,所以由连接应答处理器来处理跟客户端建立连接,然后通过 ServerScoket 创建一个与客户端一对一对应的 socket,如叫 socket01,同时将这个 socket01 的 AE_READABLE 事件和命令请求处理器关联起来。