redis服务器是一个事件驱动程序,服务器需要处理以下两种事件
  1、文件事件:redis服务器通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象,服务器和客户端的通信会产生相应的事件,服务器就是通过监听并处理这些事件来完成一系列网络通信操作。
  2、时间事件:redis服务器的一些操作(如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。

文件事件
  redis基于Reactor模式开发了自己的网络事件处理器,这个处理器被称为文件事件处理器。

文件事件处理器的构成
  分别是套接字、I/O多路复用程序、文件事件分派器以及事件处理器。
7、事件
  i/o多路复用程序,会将产生事件的套接字放置一个队列,通过队列以有序、同步的、每次一个套接字的方式向文件事件分派器传送套接字,文件事件分派器根据套接字选择事件处理器执行。
7、事件

文件事件处理器
  1、连接应答处理器:对连接服务器的各个客户端进行应答
当redis服务器初始化的时候,程序会将这个连接应答处理器和服务器监听套接字的AE_READABLE事件关联,当客户端调用socker、connect连接服务器监听套接字的时候,套接字就会产生AE_READABLE事件,引发连接应答处理器执行。

  2、命令请求处理器:处理客户端传来的命令请求
当一个客户端通过连接应答处理器成功连接服务器后,服务器会将客户端套接字的AE_READABLE事件和命令请求处理器关联起来,当客户端向服务器发送命令请求的时候,会引发命令请求处理器,并执行相应的套接字读入操作。
  3、命令回复处理器:向客户端返回命令的执行结果
当服务器有命令回复需要发送给客户端的时候,服务器会将客户端的AE_WRITABLE事件和命令回复处理器关联起来,当客户端准备好接收传回的命令回复时,就会产生AE_WRITABLE事件,引发命令回复处理器执行并执行响应的套接字写操作。
  4、复制处理器:处理主从复制的相关操作

客户端与服务端的通信过程

7、事件

时间事件
  时间事件分为定时事件和周期性事件
  实现:服务器将所有的时间事件都放在了一个无序链表中(每次会将新增的时间事件插入到链头中,无序指的是没有按时间排序),每当时间事件执行器运行时,它就遍历整个链表,查找已经到达的时间事件并执行。

事件的调度与执行

7、事件
7、事件

相关文章:

  • 2021-04-16
  • 2022-02-06
  • 2021-12-28
  • 2022-01-14
  • 2021-08-21
  • 2021-12-22
  • 2021-07-23
  • 2021-10-08
猜你喜欢
  • 2021-07-09
  • 2022-01-01
  • 2021-11-20
  • 2021-10-11
  • 2021-07-09
  • 2022-01-12
  • 2021-10-13
相关资源
相似解决方案