概要:
Redis的服务器本质上是一个事件驱动程序,其中很重要的一类事件就是对客户端的响应,Redis将服务器与客户端的套接字操作抽象为文件事件。
Redis以单线程方式运行,所以为了保证高效必须采用IO多路复用的方式,而且Redis还自己实现了基于Reactor模型的网络事件处理器。
Redis文件事件的构成
1:套接字
2:IO多路复用库
3:事件分派器
4:事件处理器
1:套接字
每个客户端通过套接字连接到服务器上,而服务器给套接字关联不同的事件处理器(所谓的事件处理器即一个处理函数,当客户端产生不同的事件的时候就会调用这些事件进行处理)。
2:IO多路复用
redis的IO多路复用就是封装了epoll,kqueue等IO多路复用库来实现,通过对这些库的抽象,从而可以任意替换。
3:事件类型
IO多路复用一共处理两类事件(ae_readable, ae_writeable),即事件类型是由服务器端角度来看的。
1:当客户端连接到服务器(connect)或者是写入命令(write)即触发读事件。
2:当客户端对套接字执行read操作,即触发写事件。
那么有多少种事件处理器呢?
1:应答事件处理器
该处理器用于服务器对客户端应答操作,即对accept函数的包装。
2:命令请求处理器
当客户端发送命令,会触发命令请求处理器,服务器后台执行命令。
3:命令回复处理器
当服务器处理好请求命令,当客户端调用read函数,触发writeable事件,调用该处理器处理。