Redis——Redis的专属事件

事件

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

文件事件

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

文件事件处理器

多个文件事件可能会并发地出现,但I/O多路复用程序总是会将所有产生事件的套接字都放到一个队列里面,通过这个队列,有序、同步、每次一个套接字的方式向文件事件分派器传送套接字

文件分派器根据套接字产生的事件的类型,调用相应的事件处理器

事件处理器是一个个函数,定义了某个事件发生时,服务器应该执行的动作

I/O多路复用程序的实现

通过包装常见的select、epoll、evport和kqueue这些I/O多路复用函数库来实现的

事件的类型

I/O多路复用程序可以监听多个套接字的ae.h/AE_READABLE事件和ae.h/AE_WRITABLE,这两类事件和套接字操作之间的对应关系如下:

如果一个套接字又可读又可写的话,那么服务器将先读套接字,后写套接字

文件事件的处理器

连接应答处理器

Redis服务器进行初始化的时候,程序将这个连接应答处理器和服务器监听套接字的AE_READABLE事件关联起来

命令请求处理器

负责从套接字中读入客户端发送的命令请求内容

命令回复处理器

负责将服务器执行命令后得到的命令回复通过套接字返回给客户端

完整的通信过程

时间事件

时间事件分为两类:

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

实现

服务器将所有时间事件都放在一个无序链表中,每当时间事件执行器运行时,遍历整个链表,查找所有已到达的时间事件,并调用相应的事件处理器

无序指的是不按when属性的大小排序,不是不按ID排序

应用实例:serverCron函数

定期对自身的资源和状态进行检查和调整,定期操作由redis.c/serverCron函数负责

事件的调度与执行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值