redis-aof

来源:互联网 发布:网络侦探攻略第十九章 编辑:程序博客网 时间:2024/05/17 22:10

第一节:AOF导出

1、就是追加命令
这里写图片描述

1、写命令是先追加在aof_buffer的,在执行一个命令后,会根据配置进行再次写入aof文件中
2、redis服务器,就是不停的循环事件,
这里写图片描述
3、根据配置写入aof文件
这里写图片描述
默认是,每隔1s钟,把aof_buffer写入aof磁盘文件

aof_buffer:内存缓冲区
aof文件写入:磁盘缓冲区
aof文件同步:写入磁盘
默认,每隔1s钟,把命令同步到aof文件,实现永久保存

第二节:AOF重写

1、因为aof生成过程中,会产生大量的冗余命令,需要对命令重写,生成新的aof文件,替换掉旧的aof文件
2、aof文件重写不是对旧的文件进行重写组织,而是对内存的快照,只是和RDB比起来,用的是命令,不是具体的key,value复制
3、aof重写用的是另外一个进程,不影响工作进程
4、在重写的过程中,新进来的写命令,会被追加到aof重写缓冲区,注意和aof_buffer的区别
5、在子进程做完重写aof后,父进程收到信号,把aof重写缓冲区追加到aof文件,不会丢失数据
同时,也让父进程可以一直工作,重写是一个耗时长的工作
这里写图片描述

第三节:什么时候重写

1)、没有BGSAVE命令(RDB持久化)/AOF持久化在执行;

2)、没有BGREWRITEAOF在进行;

3)、当前AOF文件大小要大于server.aof_rewrite_min_size(默认为1MB),或者在redis.conf配置了auto-aof-rewrite-min-size大小;

4)、当前AOF文件大小和最后一次重写后的大小之间的比率等于或者等于指定的增长百分比(在配置文件设置了auto-aof-rewrite-percentage参数,不设置默认为100%)

归纳下:没有归档命令时,在aof文件达到一定大小时,默认1MB,或者上一次重写文件大小比现在普通aof写入文件 翻倍,可以自己设置,就进行重写
aof文件翻倍,aof文件太大两个条件

归纳

aof文件的生成过程:
每次写命令执行—写命令写入aof_buffer—检查配置是否符合多少秒写入的命令数,一般默认1s钟—-将aof_buffer写入磁盘缓冲(写入aof文件句柄)—如果是默认配置则每隔1秒同时把磁盘缓存同步到磁盘,形成aof文件—再检查是否满足重写条件—距离上一次重写,文件翻倍,或者文件大于1MB—则另起一个进程进行对内存重写命令–同时工作进程把新进来的写命令写入aof重写缓存—重写完成子进程消失,父进程把aof重写缓存写入aof文件,流程结束