Redis服务器是一个事件驱动程序,它基于Reactor模式开发了自己的网络事件处理器,称为文件事件处理器(file event handler)。
文件事件处理器使用I/O多路复用(Multiplexing)程序来同时监听多个socket,并为socket关联不同的事件处理器。当被监听的套接字准备好执行accept、read、write、close等操作时,与之对应的文件事件就会产生。
Redis IO多路复用程序所有功能是通过包装select,epoll,evport,kqueue这些函数实现的,对应源码ae_select.c、ae_epoll.c、ae_kqueue.c文件。
Redis为每个I/O多路复用函数库都实现了相同的API,I/O多路复用程序的底层实现是可以互换的。事实上,Redis源码中用#include
宏定义了相应的规则,程序会在编译时自动选择系统中性能最高的I/O多路复用函数作为Redis的底层实现。