redis源码阅读笔记-- 事件

Redis 事件

  • 一 、 事件综述

1 文件事件:redis是事件驱动程序,redis服务器通过套接字与客户端进行连接,处理命令请求,产生命令回复,这些过程成为文件事件。

2 时间事件:redis服务器在指定时间或是周期性时间执行函数调用。Redis是单进程单线程模型,串行地执行文件事件和时间事件,比如在AOF文件的持久化操作的写入与同步操作,redis进程先执行文件事件处理客户端命令请求然后回复命令回复,接着执行时间事件将,执行serverCron函数,调用flushAppendOnlyFile函数,将aof_buf缓存区里的写命令写入与同步到AOF文件中。置于何时同步?在配置文件里有三种选项:always:每次写入就同步
everysec,距离上次同步时间超过1秒则同步 no表示由系统决定何时同步。

  • 二、文件事件

Redis基于Reactor模式开发了自己的网络事件处理器,被称为文件事件处理器。文件事件处理器分为四个组成部分,套接字,I/O多路复用程序,文件事件分派器和事件处理器。文件事件处理器以单线程方式运行,使用 I/O多路复用程序同时监听多个套接字,当套接字准备好执行连接应答,读取,写入等操作时,相应地文件事件就会产生,向事件分派器传递套接字。由于监听多个套接字,所以多个事件可能并发出现,I/O多路复用技术将所有产生文件事件的套接字放入一个有序,同步的队列中,分派器从队列另一头取出套接字,根据套接字关联的事件调用相应地处理器。

2.文件事件处理器:
连接应答处理器,命令请求处理器,命令回复处理器

  • 三、时间事件

Redis将时间事件分为定时事件和定期事件,程序在指定时间执行或是在指定周期执行。时间事件主要有三个属性:id,when:表示事件执行的时间,是一个UNIX时间戳,函数,当时间到了就调用此函数处理事件。

服务器将所以时间事件放在一个无序链表中,时间事件是一个节点,时间事件执行器遍历整个链表,查找已到达的时间事件,调用相应地事件处理器。

serverCron函数:正常情况下redis服务器只有一个时间事件serverCron函数。它让redis可以定期地对自身资源和状态进行检查与调整,每隔100毫秒执行一次,更新系统缓存时间,清理数据库中的过期键值对(定期删除策略),关闭连接失效的客户端,进行AOF(文件事件之后flushappendonfile写入,然后根据配置文件 决定什么时候同步)或RDB(save选项)持久化操作。

你可能感兴趣的:(redis源码阅读笔记)