Redis内部使用的是文件事件处理器file event handler,它
是单线程的,所以Redis叫做单线程模型。它采用IO多路复用机制同时监听多个socket,将产生事件的socket压入内存队列中,事件分派器根据socket上的事件类型来选择对应的事件处理器进行处理。文件事件处理器包含4个部分:多个socket、IO多路复用程序、文件事件分派器、事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)。多个socket可能会并发产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个socket,会将产生事件的socket放入队列中排队,事件分派器每次从队列中取出一个 socket,根据socket的事件类型交给对应的事件处理器进行处理。下面是客户端与Redis的一次通信过程:
Redis服务端进程初始化的时候,会将server socket的AE_READABLE
事件与连接应答处理器关联。客户端socket01向Redis进程的server socket请求建立连接,此时server socket会产生一个AE_READABLE
事件,IO多路复用程序监听到server socket产生的事件后,将该socket压入队列中。文件事件分派器从队列中获取socket,交给连接应答处理器。连接应答处理器会创建一个能与客户端通信的socket01,并将该socket01的AE_READABLE
事件与命令请求处理器关联。假设此时客户端发送了一个set key value<