📖 版块 A:知识讲解版 (温故知新)
-
什么是Reactor模型? Reactor 模型是一种基于事件驱动机制用来处理高并发网络 IO 请求的设计模式。 它本质上通过三大核心角色和三大核心事件来实现高效的请求分发与处理:
-
三大角色:
- Acceptor:负责接收客户端的网络连接请求。
- Reactor:核心的事件派发器,负责监听和分配事件(基于 epoll 实现)。
- Handler:负责实际的事件处理逻辑(如读取数据、命令执行、数据写回)。
-
三大事件:
- 连接事件:Reactor 将产生的连接请求交由 Acceptor 处理,建立连接并注册读写事件。
- 读事件:Reactor 监听到有数据可读,交由对应的 Handler 处理(
readQueryFromClient)。 - 写事件:Reactor 监听到有数据需要返回,交由 Handler 执行输出(
sendReplyToClient)。
-
-
Redis中的事件处理框架: Redis 把事件分成了两类:IO 事件(如客户端请求)和时间事件(如内部的定时任务、AOF文件检查等)。
- IO 事件以数组的形式存储(
aeFileEvent),通过 epoll 监听。 - 时间事件以链表的形式组织(
aeTimeEvent)。 - 主循环框架
aeMain会在一个无限循环中调用aeProcessEvents,不断捕获并分发这两类事件。
- IO 事件以数组的形式存储(
🎤 版块 B:面试实战版 (高手逐字稿)
Q:Redis的网络事件驱动模型是怎样的?什么是Reactor模型?
💬 高手逐字稿:
Redis 的高性能网络通信主要是通过封装操作系统的多路复用函数(比如 Linux 的 epoll),实现了一套基于 Reactor 模型 的事件驱动框架。
简单来说,Reactor 模型就是一种事件驱动的设计模式。在 Redis 中,它的核心由三个角色组成:首先是 Acceptor 负责接收客户端的 TCP 连接;其次是 Reactor,它像一个交通枢纽,负责监听底层触发的网络事件并进行分发;最后是 Handler,负责具体的业务逻辑执行。
当客户端发起请求时,整体流程是这样的: 一开始,Redis 会将服务端监听套接字的连接事件注册到事件驱动框架中。当客户端连接时,Reactor 捕获到连接事件,交给 Acceptor 建立连接,并为这个客户端注册“读事件”。 接着,当客户端发送具体的 Redis 命令时,Reactor 会捕获到“读事件”,并分发给对应的读取逻辑 Handler 进行解析和执行。 最后,命令执行完需要返回结果时,Redis 并不会直接同步写回,而是会在事件循环中注册一个“写事件”,当底层网络可写时,由写逻辑 Handler 异步把缓冲区的数据发送给客户端。
另外值得一提的是,Redis 的事件框架不仅处理像读写这样的 IO 事件(底层用数组存),还处理系统的周期性任务,也就是 时间事件(底层用链表存,比如过期的 Key 淘汰、AOF 刷盘等)。在它的核心事件循环 aeProcessEvents 里,每次都会先处理到达的 IO 事件,然后再执行时间事件,把网络收发和内部定时任务非常巧妙地结合在了同一个主线程循环里,这也是它极其高效的原因。