07-Redis 事件

Redis 事件

一、文件事件

  • Redis是一个事件驱动程序,Redis中包含文件时间和时间时间,本文主要针对文件事件。Redis通过套接字与客户端或者其他Redis进行连接,文件事件就是对套接字操作的抽象,所有的通信都会产生相应的文件事件,服务器通过监听文件事件并处理事件来完成对应的网络通信操作;

1.1 文件事件处理器

  • Redis基于Reactor模型开发了自己的网络事件处理器,这个处理器也称为文件事件处理器;
1.1.1 构成
  • 文件事件由四部分构成:套接字、IO多路复用程序、文件事件分派器和事件处理器;
  • 套接字:一个套接字可以理解为一个客户端连接,每一个套接字的动作比如:连接、应答、写入、读取和关闭都会产生对应的事件;
  • IO多路复用程序:IO多路复用程序管理多个套接字,因此可能并发的产生事件,IO多路复用程序将产生事件的套接字放到一个有序的同步队列中;
  • 文件事件分派器:分派器从队列取出套接字,将套接字事件交给对应的事件处理器处理, 处理完毕之后IO多路复用模块才会传入下一个套接字到同步队列;
  • 事件处理器:处理对应的事件,代码上一个事件处理器对应一个函数;

在这里插入图片描述

1.1.2 IO多路复用的实现
  • IO多路复用程序在底层上是基于系统函数select、epoll、evport和kqueue来实现的,因为每一种系统函数都可以实现IO多路复用,因此Redis对于每一个系统函数在一个单独的文件中实现,因此底层可以很方便的切换,这也带来了很好的兼容性,程序在编译期间会自动选择系统中性能最好的IO多路复用函数来作为底层实现。

在这里插入图片描述

  • 下面是参考文档中的一张图片,画的很好,体现了Redis在不同平台的底层IO复用函数的选择

image

1.2 事件类型

  • 读事件(AE_READABLE):客户端写、关闭、连接都会对Redis产生读事件;
  • 写事件(AE_WRITABLE):客户端读时,对Redis产生写事件;
PS:Redis事件处理器可以处理读写事件,若同时产生,则优先处理读事件
  • 一个事件循环过程

在这里插入图片描述

二、时间事件

2.1 时间事件类型

  • Redis中时间事件分为2种,一种是定时事件,只会在给定时间执行一次;
  • 另一种是周期性事件,程序会周期性的执行

2.2 时间事件数据结构

  • Redis中时间事件对应的数据结构包括三个字段:id(递增且唯一)、when(表示执行的时间)、timeProc(时间事件处理器)
Redis根据时间事件处理器的返回值判断是周期时间还是定时事件,然后更新when的值,以此种方
式来支持两种时间事件类型

2.3 实现

  • Redis由时间事件执行器来执行时间事件,所有的时间事件以无序链表形式保存,因此需要遍历整个链表来执行所有的时间事件。不过这个并不会影响性能,因为Redis中的时间事件是很少的,就只有一两个。

2.3 时间事件serverCorn

  • serverCorn默认周期性的每100ms执行一次,2.8以后执行配置。

三、参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值