共计 925 个字符,预计需要花费 3 分钟才能阅读完成。
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
客户端动作 | 事件 | 处理器 |
---|---|---|
connect | AE_READABLE(serverFd) | 连贯应答处理器 |
write | AE_READABLE | 命令申请处理器 |
read | AE_WRITEABLE | 命令回复处理器 |
close | AE_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 事件循环