REDIS事件处理零碎,基于reactor模式开发。socket代表与客户端或其它服务器之间的连贯。当socket可交互时,即产生相应的文件事件,服务器监听并解决这些事件,来实现相应操作。

多个事件会并发呈现。I/O多路复用程序,将事件放到队列里,并以有序、同步、每次一个的形式,向事件散发器传送。事件散发器将事件交给对应的事件处理器已解决工作。

I/O多路复用

REDIS为不同的I/O多路复用函数库,实现了雷同的API,底层实现能够是select、epoll、evport、kqueue,程序在编译时,抉择性能最高的函数库。相似于java的接口与实现。

扩大:什么是I/O多路复用?

事件类型和处理器

redis蕴含两个事件类型:ae.h/AE_READABLE、ae.h/AE_WRITEABLE

客户端动作事件处理器
connectAE_READABLE(serverFd)连贯应答处理器
writeAE_READABLE命令申请处理器
readAE_WRITEABLE命令回复处理器
closeAE_READABLE连贯断开处理器

连贯应答处理器networking.c/acceptTcpHandler

监听:服务器启动时,建设监听套接字的AE_READABLE事件和连贯应答处理器的绑定关系;
触发:当客户端连贯到服务器监听套接字的时候,监听套接字产生AE_READABLE事件,触发连贯应答处理器,执行客户端连贯操作。

命令申请处理器networking.c/readQueryFromClient

监听:客户端连贯时,连贯应答处理器,建设客户端套接字的AE_READABLE事件和命令申请处理器的绑定关系;
触发:当客户端发送命令时,触发AE_READABLE事件,命令申请处理器执行命令读入和解决。

命令回复处理器networking.c/sendReplyToClient

监听:命令申请处理器执行实现后,将须要回复的音讯存在客户端reply缓存内,并监听AE_WRITEABLE事件
触发:当客户端read时,命令回复处理器将reply缓存内的音讯写入客户端socket。而后勾销AE_WRITEABLE关联

参考

【1】《Redis 设计与实现》
【2】redis事件循环