引言

Redis基于Reactor模式开发了自己的网路事件处理器,称为文件事件处理器,其使用I/O多路复用,同时监听多个套接字,根据套接字执行的任务来为套接字关联不同的事件处理器。
文件事件处理器以单线程运行,Redis服务器中的其他模块也是单线程方式运行。

1、Redis中的Reactor体现

Redis使用了一个称为“A simple event-driven programming library”的自制异步事件库来实现Reactor模型。

1.1、构成

分为四个部分:套接字、I/O多路复用程序、文件事件派发器、事件处理器。

I/O多路复用程序会监听多个套接字,并将所有产生事件的套接字放到一个队列中,通过队列,每次一个套接字的方式向文件事件派发器传送套接字,相应的有事件处理器处理这些套接字。
当该套接字为事件所关联的事件处理器处理完毕之后,I/O多路复用程序才会继续向文件事件派发器传送下一个套接字。

1.1.1、I/O多路复用程序

redis是通过包装select\epoll\evport\kqueue这些I/O多路复用函数库实现的,程序编译时自动选择系统中性能更高的函数库作为redis I/O多路复用程序的底层实现。

1.1.2、事件处理器

有连接应答处理器、命令请求处理器、命令回复处理器。

tencent.jpg