Redis服务器是一个事件驱动程序需要
文件事件
- 1.redis服务器通过socket与客户端和其他redis服务器进行连接。
- 2.文件事件就是指服务器对socket操作的抽象。
- 3.服务器与客户端或者其他redis服务器的通信会产生相应的文件事件,服务器通过监听并处理这些事件。
文件事件处理器的构成
- 1.Socket
- 2.IO多路复用
- 3.文件事件分派器
- 4.事件处理器
- 5.其中多路复用把socket通过队列传输到文件事件分派器。只有上一个socket处理完毕才会处理下一个
时间事件类别
- 1.定时事件,比如serverCron函数
- 2.周期事件
- 3.定时操作在事件到达后该事件就被删除
- 4.周期事件到达后对when属性更新
事件事件构成
- 1.id:全局唯一,递增
- 2.when:毫秒精度的时间戳
- 3.timeProc:事件处理器函数
如何实现时间事件
- 1.采用无序链表(无序是指没有按照when的时间排序)
- 2.新来的时间事件插入到链表表头,形成倒叙。
- 3.服务器遍历无序链表找到时间时间去执行。
- 4.因为默认只有一个serverCorn这个定时任务,我们的定时过期都依靠该定时任务去删除等。
serverCron的作用
- 1.更新服务器的相关信息
- 2.清理过期key
- 3.关闭和清理失效的客户端
- 4.尝试AOF和RDB持久化操作
- 5.定期同步
- 6.默认每100毫秒执行一次
事件调度与运行
- 1.整体流程类似NioEventloop的run方法
- 2.计算最近的时间事件
- 3.如果已经有了 在查看是否有文件事件,如果还没到时间则阻塞等待文件事件
- 4.优先处理文件事件,在处理定时。
- 5.整个逻辑就是如果既没有时间事件也没有文件事件则阻塞,否则优先处理文件事件
网友评论