参考《redis设计与实现(第二版)》 参考博客(需要登录):https://blog.csdn.net/y277an/article/details/98342442
Redis 服务器是一个事件驱动程序,需要处理两类时间:
- 文件事件:对 Linux 套接字的操作是基于文件的,所以要监听这类事件
- 时间事件:Redis 服务器的一些操作(如 serverCron 函数)需要在给定的事件点执行
Redis 基于 Reactor 模式开发了自己的网络事件处理器:文件事件处理器
文件事件处理器:
- 套接字
- I/O 多路复用程序
- 文件事件分发器:是单线程的,Redis 基于它工作,所以说 Redis 是单线程的
- 事件处理器:
- 连接应答处理器:将事件与处理器关联
- 处理客户端连接
- 命令请求处理器:执行客户端命令操作
- 接受和处理客户端的命令
- 命令回复处理器:解除事件和处理器的关联
- 将结果响应给客户端
- 连接应答处理器:将事件与处理器关联
文件事件类型:
- 套接字可读:客户端 write、close、connect,套接字产生 AE_READABLE 事件
- 套接字可写:客户端 read,套接字产生 AE_WRITABLE 事件
- 如果一个套接字同时产生了这两种事件,文件事件分派器会优先处理 AE_READABLE
I/O 多路复用程序会将产生事件的套接字放到一个队列中: