Redis学习(三)—— 文件事件和时间事件

1、Redis服务器是一个事件驱动程序,服务器处理的时间分为时间事件和文件事件
  • 文件事件:Redis服务器通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象。 普通服务器与客户端的通信,会产生相应的文件事件,服务器需要监听并能够处理这些事件来完成网络通信操作。
  • 时间事件:服务器的某些操作需要进行定时操作,而时间事件就是对这类定时操作的抽象。
2、文件事件处理器是基于Reactor模式实现的网络通信程序。
  • 文件事件处理器使用 I/O 多路复用模式来同时监听多个套接字,并根据不同的套接字来关联到不同的事件处理器。
  • 这里关于Reactor模式的解释,这篇文章有详细说明,大家可以点击链接查看。
  • 而文件事件处理器则是由多个套接字、I/O 多路复用程序、文件事件分派器、文件事件处理器来组成的,I/O多路复用程序负责同时监听不同的套接字,当不同的套接字产生相应的事件,该程序会向文件事件分派器传送对应的套接字,让其关联到对应的事件处理器,具体的结构如下:
    在这里插入图片描述
3、时间事件分为定时事件和周期性事件
  • 一个时间事件由三部分组成:
    (1)id:时间事件的全局唯一的ID(标识号)
    (2)when:毫秒级别的UNIX时间戳
    (3)timeProc:时间事件处理器
  • 一个时间是定时事件还是周期性事件,取决于时间事件处理器的返回值,当返回一个ae.h/AE_NOMORE,该事件为定时事件,若为一个非AE_NOMORE值,则是一个周期性事件,同时通过这个返回值,对时间事件的when属性进行更新,让该事件在该返回值对应的毫秒数后再继续执行。
  • Redis服务器会将所有的时间事件放入一个无序链表中,每当时间时间执行器运行时,会遍历整个链表,找到已经到达时间的事件,并调用相应的事件处理器。
4、服务器一般情况下,只执行serverCron函数一个时间事件,而且这个事件是一个周期性事件

Redis服务器通过在运行期间,需要不断进行检查数据库的状态,是否正常,使服务器能够长期、有效的运行,而这些操作则是由redis.h/serverCron函数负责执行,其主要工作有:

  • 更新服务器的各统计信息,比如时间、内存占用、数据库占用情况等。
  • 清理数据库的过期键值对。
  • 关闭和清理连接失效的客户端。
  • 尝试进行AOF或者RDB持久化。
  • 如果是主服务器,还需要对从服务器进行定期同步。
  • 如果处于集群模式,还需要对集群进行定期同步和连接测试。
5、文件事件和时间事件之间是合作关系,服务器会轮流执行这两种事件,并且在处理相应的事件时,不能进行抢占。

服务器通过监听多种套接字,这些套接字对应不同的事件处理器,当客户端对套接字进行相应操作时,套接字会产生相应的事件,I/O多路复用程序允许服务器监听套接字的事件。

  • 由于文件事件的产生时随机的,如果在等待并处理文件事件的过程中,没有时间事件到达,服务器会继续等待处理文件事件,当时间事件的最终时间达到时,服务器便开始执行到达的时间事件。
  • 而对于文件事件和时间事件的执行,都是同步、有序、原子的,服务器不会去中断事件处理,也不会对事件进行抢占。
  • 由于上面一点, 时间事件的实际处理时间通常比设定的到达时间晚一些。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值