深入Redis原理与应用——Redis中的事件

深入Redis原理与应用——Redis中的事件


Redis 中的事件分为文件事件和时间事件。

文件事件

(1)redis 基于 Reactor 模型开发了自己的网络事件处理器,这个处理器被称为文件事件处理器。文件事件处理器使用 IO 多路复用程序来监听多个套接字,并根据套接字目前的执行任务来为套接字关联不同的事件处理器。当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)关闭(close)等操作时,与之相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。
(2)虽然文件处理器以单线程方式运行,但通过使用 IO 多路复用程序来监听套接字既实现了高性能的网络通信模型又很好地与 redis 服务器中其它同样以单线程方式运行的模块进行对接。
(3)文件事件处理器分为四个部分:套接字、IO 多路复用程序、文件事件分派器以及事件处理器。
在这里插入图片描述
(4)文件事件是对套接字操作的抽象。尽管多个文件事件可能会并发地出现,但 IO 多路复用程序总是会将所有产生事件的套接字都放到一个队列里面然后通过这个队列以有序、同步、每次一个套接字的方式向文件事件分派器传送套接字,上一个套接字传输的事件处理完后才会接着处理下一个。文件事件分派器接收 IO 多路复用程序传来的套接字并根据套接字产生的事件类型调用相应的事件处理器。
(5)IO多路复用程序的实现:redis 中 IO 多路复用程序的所有功能都是包装常见的 select、epoll、evport 和 kqueue 这些 IO 多路复用的函数库来实现的。其事件分为 AE_READABLE 和AE_WRITABLE 事件:当套接字变得可读或者有新的可应答套接字出现时套接字产生AE_READABLE 时间,当套接字变得可写时产生 AE_WRITABLE 事件。
(6)文件事件处理器:

  • 连接应答处理器:当客户端的 connect 函数连接服务器监听套接字时套接字就会产生 AE_READABLE 事件引发连接应答处理器执行(注意此处是连接的服务器的监听套接字)。
  • 命令请求处理器:当一个客户端通过连接应答处理器成功连接到服务器之后,服务器就会将客户端套接字的 AE_READABLE 事件和命令请求处理器关联起来,当客户端向服务器发送命令请求时套接字就会产生E_READABLE 事件引发命令请求处理器执行并执行相应的套接字读入操作。
  • 命令回复处理器:该处理器负责将服务器执行命令后得到的回复通过套接字方会给客户端。当服务器有命令回复需要传送给客户端时,服务器会将客户端套接字的AE_WRITABLE 事件和命令回复处理器关联起来,当客户端准备好接收服务器传回的命令回复时就会产生 AE_WRITABLE 事件,引发命令回复处理器执行并执行相应的套接字写入操作。回复完之后服务器就会接触命令回复处理器与客户端套接字的 AE_WRITABLE 事件之间的关联。

时间事件

(1)redis 的时间事件分为定时事件(让一段程序在指定时间之后执行一次)和周期性时间(让一段程序每隔一段时间就执行一次)。目前 redis 没有使用定时事件,都是周期性事件。
(2)redis 将所有的时间时间都放在一个无序链表(无序指的是不按 when 属性排序)timeevents 中。
(3)时间事件应用实例:serverCron 函数。持续运行的 redis 服务器需要定期对自身的资源和状态进行检查和调整,从而确保服务器可以长期稳定运行,这些定期操作由 serverCron函数负责执行,其工作内容包括:

  • 更新服务器中的各类统计信息,包括时间内存占用,数据库占用情况等。
  • 清理数据库中的过期键值对。
  • 关闭和清理连接失效的客户端。
  • 尝试进行 AOF 和 RDB 的持久化操作。
  • 如果服务器是主服务器,那么对从服务器进行定期的同步。
  • 如果处于集群模式,对集群进行定期同步和连接测试。

redis 以周期性事件的方式来运行 serverCron 函数,默认每秒执行 10 次。
(4)文件事件和时间事件是合作关系,服务器会轮流处理这两种事件,两种事件是同步有序原子地执行,处理事件过程中也不会出现抢占。时间事件的处理时间通常比设定的到达时间晚一点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值