参考《redis设计与实现(第二版)》 参考博客(需要登录):https://blog.csdn.net/y277an/article/details/98342442

Redis 服务器是一个事件驱动程序,需要处理两类时间:

  • 文件事件:对 Linux 套接字的操作是基于文件的,所以要监听这类事件
  • 时间事件:Redis 服务器的一些操作(如 serverCron 函数)需要在给定的事件点执行

Redis 基于 Reactor 模式开发了自己的网络事件处理器:文件事件处理器

image.png

文件事件处理器:

  • 套接字
  • I/O 多路复用程序
  • 文件事件分发器:是单线程的,Redis 基于它工作,所以说 Redis 是单线程的
  • 事件处理器
    • 连接应答处理器:将事件与处理器关联
      • 处理客户端连接
    • 命令请求处理器:执行客户端命令操作
      • 接受和处理客户端的命令
    • 命令回复处理器:解除事件和处理器的关联
      • 结果响应给客户端

文件事件类型:

  • 套接字可读:客户端 write、close、connect,套接字产生 AE_READABLE 事件
  • 套接字可写:客户端 read,套接字产生 AE_WRITABLE 事件
  • 如果一个套接字同时产生了这两种事件,文件事件分派器优先处理 AE_READABLE

image.png

I/O 多路复用程序会将产生事件的套接字放到一个队列中:
image.png

编译时会自动选择系统性能最好的 IO 多路复用函数库:
Redis 线程模型 - 图4

Redis 处理流程:

Redis 线程模型 - 图5