介绍
AOF,append of file
redis会将所有 写命令 都 追加 到 AOF文件中
- 读命令不记录
- 只追加不改写AOF文件
redis启动时读取 AOF文件,通过执行 写命令 恢复数据
开启AOF备份
默认不开启,需要修改配置文件
按照下面改成yes
appendonly yes
AOF文件路径
与RDB保存路径相同
在redis.conf配置文件中:
dir ./
表示当前启动redis服务的目录,
- 如果在linux上安装redis,需要改成固定目录
- 如果docker redis,不需要修改
AOF文件名
appendfilename "appendonly.aof"
获取数据保存路径
config get dir
查看appendonly.aof内容
REDIS0009ú redis-ver^E6.0.5ú
redis-bitsÀ@ú^EctimeÂa<93>ü^ú^Hused-memÂ@<85>^M^@ú^Laof-preambleÀ^Aÿ>ÊÑ]<82>â<87>|*2^M
$6^M
SELECT^M
$1^M
0^M
保存策略
一直同步(默认不开启)
每次 写命令 都会写入 AOF文件
# appendfsync always
每秒同步(默认开启)
每一秒将 写命令 写入 AOF文件,如果关机、redis崩溃,当前一秒的数据可能丢失
appendfsync everysec
不同步
# appendfsync no
文件重写rewrite
由于采用 追加 方式写 AOF文件,导致文件越来越大,为了避免这种情况,会:
fork子进程,将 整个内存中的数据 用命令方式重写入新的aof文件
bgrewriteaof
执行 bgrewriteaof 命令,会重写
自动重写
重写会消耗性能,所以要满足一定条件才会重新
系统载入时或上次重写完,会记录 AOF文件大小(base_size),当 AOF文件大小 大于等于 base_size+base_size*100%,且大于等于 64mb时,进行重新,配置如下:
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
数据恢复
- 关闭redis
- 把
*.aof文件拷贝到数据保存路径,通过config get dir查看 - 启动redis,快照文件直接加载
aof文件损坏
通过下面命令恢复(但能力有限)
redis-check-aof --fix appendonly.aof
优点
AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,通过一个后台线程执行一次写操作,最多丢失1秒钟的数据。
采用追加方式,写入性能非常高,文件不容易破损。
AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。
AOF日志文件的命令通过 非常可读 的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复。
比如某人不小心用flushall命令清空了所有数据,只要这个时候后台rewrite还没有发生,那么就可以立即拷贝AOF文件,将最后一条flushall命令给删了,然后再将该AOF文件放回去,就可以通过恢复机制,自动恢复所有数据
缺点
- AOF文件比RDB文件更大
- 恢复数据慢,通过命令恢复数据
- 当数据复杂时,存在个别bug,会造成不能完全恢复
- AOF内容不要乱改,会造成不能完全恢复