- AOF持久化
AOF是通过保存redis服务器每次所执行的写命令来记录数据库状态
AOF持久化的实现
分为命令追加(append)、文件写入、文件同步(sync)三个步骤
命令追加:
AOF文件的写入与同步
AOF文件的载入与数据还原
Redis读取AOF文件并还原数据库的步骤如下:
AOF重写
通过这个功能可以减小AOF文件的大小,减少冗余命令的写入
AOF重写的实现:
AOF后台重写(子进程):
因为存在一个AOF重写缓冲区记录了所有的写操作,所以不害怕存在不一致,只需要最后进行一次比对写入就可以了
最后服务器用新AOF文件替换旧文件,完成重写
- 事件
Redis是一个事件驱动程序,主要处理两类事件:
文件事件:
文件事件处理器的构成
套接字准备好执行一些操作,每个套接字都会产生一个文件事件,一个服务器会连接多个套接字,所以可能会出现多个并发文件事件
I/O多路复用程序负责监听多个套接字并向文件事件分派器传送相应的套接字(通过队列每次分派一个套接字)
文件事件分派器接受到套接字之后,根据套接字产生的文件事件类型,调用相应的事件处理器
服务器会为执行不同任务的套接字关联不同的事件处理器
I/O多路复用程序的实现
程序会在编译时自动选择性能最高的函数
事件的类型
文件事件的处理器
- 连接应答处理器
- 命令请求处理器
- 命令回复处理器
时间事件
目前redis只有周期性事件,没有定时事件
实现
时间时间的应用实例:serverCron函数
这个函数以周期性运转来进行这些工作
事件的调度与执行(决定处理事件的种类和方式)
规则如下:
例如下图:
在处理时间事件之前,已经处理了两个文件事件
处理时间事件的时间比预定的100ms满了30ms,因为不会出现抢占,所以只能等前面的结束