redis事件类型解析

redis服务器是一个事件驱动程序,服务器总体来说可以分为两种事件:文件事件和时间事件,下面根据这两种事件分别进行介绍

总结自redis设计与实现一书

文件事件

上图:
在这里插入图片描述
可以看到,文件事件处理器由四部分组成:分别是套接字,io多路复用程序,多路复用分派器和各种不同的事件处理器组成。

套接字

可以理解为不同的客户端请求

io多路复用程序

redis统一封装了常见的io多路复用函数,譬如select,epoll,evport,和kqueue,并且提供了相同的api(多态?策略设计模式?),导致redis程序会在编译时候自动选择系统中性能最高的io多路复用程序来作为redis的io多路复用程序的底层实现,多路复用程序底层维护了一个队列,只有处理完一个socket请求,下一个socket请求才会转发给文件事件分配器,也体现了redis单线程处理的工作线程为单线程处理。

文件事件分派器

负责接受io多路复用程序穿来的socket,并感觉套接字产生的事件类型调用不同的事件处理器。

事件处理器

请求处理器,回复处理器,连接处理器等

时间事件

时间事件分为两类:
定时事件:让程序在指定的时间执行
周期性事件 : 让程序周期性执行,每隔一定时间执行一次
redis目前只有周期性事件,没有定时事件,且周期性事件只有servercron一个事件。区分在于调用不同的事件返回的的值,如果返回一个整数值,则会更新下次时间事件到达的时间。为周期性事件,如果返回ae.h/AE_NOMORE,该事件在到达之后会删除对应的时间。

servercron作用:

  1. 更新服务器的各类统计信息,比如时间、内存占用、数据库占用情况等
  2. 清理数据库中的过期键值对
  3. 对不合理的数据库进行大小调整
  4. 关闭和清理连接失效的客户端
  5. 尝试进行 AOF 或 RDB 持久化操作
  6. 如果服务器是主节点的话,对附属节点进行定期同步
  7. 如果处于集群模式的话,对集群进行定期同步和连接测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值