redis学习(五) --- 事件

   redis服务器是一个事件驱动程序,服务器需要处理两种事件类型:

  • 文件事件:redis服务器通过套接字与客户端连接,而文件事件就是服务器对套接字的抽象,服务端则通过监听和处理事件来完成网络通信
  • 时间事件:在给定的时间执行的事件

文件事件

   redis基于rector模式处理网络事件,称为文件事件处理器。

   如图中,文件事件处理器的四个部分:

  • 套接字:每当一个套接字准备好执行连接应答,写入,读取,关闭等操作的时候,会产生一个文件事件
  • I/O多路复用程序:负责监听多个套接字,并向文件事件分派器传送那些产生事件的套接字。I/O多路复用程序会将所有产生的事件的套接字都放在一个队列中,然后通过队列,有序的同步的,每次一个套接字的方式向文件事件分派器传送套接字。当上一个套接字产生的事件被处理完之后,才会向分派器分发下一个套接字。
    • 包装了常见的select,poll,epoll等多路复用,程序会在运行时选择性能最高的方式
    • 套接字产生的事件分为可读和可写。但是同一个套接字可以同时产生这两种事件,那么会优先处理可读事件。
  • 文件事件分派器:接受套接字,根据产生的事件调用响应的处理器
  • 事件处理器:是一个个函数,具体的处理。有以下几个主要的处理器:
    • 连接应答处理器:对连接服务器的各个客户端进行应答,套接字产生可读事件
    • 命令请求处理器:为了接受客户端传来的命令请求,套接字产生可读事件
    • 命令回复处理器:为客户端返回命令的执行结果,套接字产生可写事件

   上图是客户端一次与服务端建立连接,并发送命令的流程。

时间事件

   时间事件分为以下两类:

  • 定时事件:在指定时间之后执行一次
  • 周期性事件:每隔一段时间执行一次

   一个时间事件由三个属性组成:

  • ID:全局唯一ID,从小到大产生,新的事件的ID比旧事件的ID大
  • when:记录时间事件的到达时间。
  • timeproc:一个函数,当时间事件到达时,服务器会调用相应的事件处理器

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值