基于 Reactor 模式

Redis 单线程模型

Redis 基于 Reactor 模式来设计开发了自己的一套高效的事件处理模型,这套事件处理模型对应的是 Redis 中的文件事件处理器(file event handler),由于文件事件处理器(file event handler)是单线程方式运行的,所以我们一般都说 Redis 是单线程模型

Redis 通过 IO 多路复用程序来监听来自客户端的大量连接,I/O 多路复用技术的使用让 Redis 不需要额外创建多余的线程来监听客户端的大量连接,降低了资源的消耗

Redis 服务器是一个事件驱动程序,服务器需要处理两类事件:文件事件、时间事件

《Redis 设计与实现》中,是这么介绍文件事件的

Redis 基于 Reactor 模式开发了自己的网络事件处理器:这个处理器被称为文件事件处理器(file event handler)。文件事件处理器使用 I/O 多路复用(multiplexing)程序来同时监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的事件处理器。

当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关 闭(close)等操作时,与操作相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件

虽然文件事件处理器以单线程方式运行,但通过使用 I/O 多路复用程序来监听多个套接字,文件事件处理器既实现了高性能的网络通信模型,又可以很好地与 Redis 服务器中其他同样以单线程方式运行的模块进行对接,这保持了 Redis 内部单线程设计的简单性

文件事件处理器(file event handler)主要是包含 4 个部分:

20220407-1

资料

《Redis 设计与实现》

JavaGuide