1. AOF是什么
-
AOF(append only file) :以日志的形式来将Redis执行过的所有写指令记录到文件中,且只允许追加文件但不可以更改文件。默认文件名:appendonly.aof
flushall也会被当做写操作,记录进文件
2. 如何启动AOF备份
- 默认是关闭AOF备份功能的,将redis.conf中的appendonly no改为appendonly yes,即可开启AOF备份
3. 如何使用AOF进行数据恢复
- 保证appendonly 被设置为yes
- 将AOF文件放在redis安装目录。(使用config get dir 命令获取目录)
- 启动redis
4. AOF恢复的原理
- Redis启动之初会读取该文件重新构建数据。就是将日志文件中的指令从头到尾执行一次,以完成数据的恢复工作
5. AOF的同步策略
- appendfsync always:每修改同步。每次发生数据变化,就立刻记录到aof文件中。性能差,但数据完整性高
- appendfsync everysec:默认。每秒同步,异步操作。每秒将数据变化记录到aof文件中。服务器一秒内down掉,会有数据丢失。这个操作是由一个线程专门负责执行的
- appendfsync no: 将aof缓冲区中的内容写入到AOF文件中,但并不对AOF同步,何时同步交给OS
6. AOF-Rewrite
- 由AOF的定义,我们不难知道AOF文件只会越来越大。为了避免这种清空,增加了重写机制
- 当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集
- 可以使用bgrewriteaof命令异步执行一个 AOF-Rewrite操作
- 原理
- AOF文件大小超过设定的阈值时,Redis会fork一条新的进程来将文件重写(先写成临时文件再rename)。
- Redis会重新遍历fork出进程的内存中的数据,记录每一个与变更数据有关的指令。
- 重写AOF文件的操作,并不是读取就的AOF文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的AOF文件。
- 何时触发aof-rewrite
- 默认配置是:当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发(Redis会记录上次重写是的AOF大小)
- 如何配置
- auto-aof-rewrite-percentage 100:触发重写的基准值
- auto-aof-rewrite-min-size 64mb:触发重写基准值
- no-appendfsync-on-rewrite no:重写时是否可以运用同步策略(appendfsync)。用默认no即可,保证数据安全
7. 如何修复损坏的AOF文件
- AOF文件存在错误时,Redis是无法启动的。使用redis-check-aof --fix appendonly.aof 命令进行修复
8. AOF优劣势
- 优势
- AOF可以更好的保护数据不丢失,一般AOF会以每隔1秒,通过后台的一个线程去执行一次fsync操作,如果redis进程挂掉,最多丢失1秒的数据。
- AOF以appen-only的模式写入,所以没有任何磁盘寻址的开销,写入性能非常高。
- AOF 文件里面包含一个接一个的操作,具有很强的易读性。例如,即使你不小心错误地使用 FLUSHALL 命令清空一切,如果此时并没有执行重写,你仍然可以保存你的数据集,你只要停止服务器,删除最后一条命令,然后重启 Redis 就可以恢复
- 劣势
- 相同数据集的数据而言,AOF文件远大于RDB文件,恢复速度慢与RDB
- AOF运行效率慢与RDB,每秒同步策略效率较好,不同步效率和RDB相同
9. RDB&AOF优先级
- 同时开启RDB和AOF持久化的情况下,Redis会优先且只载入AOF文件来恢复数据。