AOF简介
redis持久化存储的方式有rdb序列化存储和aof(append only file)。aof就是将操作和数据以格式化指令的方式追加到操作日志的尾部,在append操作返回后,才进行实际的数据变更。AOF文件保存了历史所有的操作过程;当redis server需要数据恢复的时候,可以直接从该文件中读取日志进行重做就可以还原。
AOF配置
打开aof配置,只要在配置文件里面写入对应的参数开关,并写上对应的aof文件的位置即可。
appendonly yes
appendfilename "/data/redis/appendonly.aof"
aof写磁盘有三种方式
appendfsync always
每次都是要刷入磁盘 这样的话就是会卡io
appendfsync everysec
每秒刷一次
appendfsync no
操作系统自己刷
aof重写
aof文件是以追加的方式追加日志,随着时间的推移,这个文件就会越来越大;并且一些key已经被删除了,日志里面还记录了一些操作里面,就不必要了,记录太多也会影响启动恢复速度。这时候就可以将aof文件进行序列化操作,然后再进行aof,这样子文件就会变小。
auto-aof-rewrite-percentage 100
涨的百分比 0就是不rewrite
auto-aof-rewrite-min-size 64mb
最小开始rewrite的大小
redis 重写是启用一个新的子进程,然后在子进程里面把rdb里面的数据序列化到新的aof文件中。在子进程写rdb的过程中,使用pipe通信来把主进程新的修改接收保存。在rbd写完之后追加到aof文件中。报告写入完成,停止接收新的修改最后结束。主进程把aof文件替换。也把子进程到主进程切换过程中的写入追加到aof。aof_fd切换成新的fd。整个流程完成。
aof优点
使用 AOF Redis 会更具有可持久性(durable):你可以有很多不同的 fsync 策略:没有 fsync,每秒 fsync,每次请求时 fsync。使用默认的每秒 fsync 策略,写性能也仍然很不错(fsync 是由后台线程完成的,主线程继续努力地执行写请求),即便你也就仅仅只损失一秒钟的写数据。
AOF 日志是一个追加文件,所以不需要定位,在断电时也没有损坏问题。即使由于某种原因文件末尾是一个写到一半的命令(磁盘满或者其他原因),redis-check-aof 工具也可以很轻易的修复。
AOF 文件里面包含一个接一个的操作,以易于理解和解析的格式存储。你也可以轻易的导出一个 AOF 文件。例如,即使你不小心错误地使用 FLUSHALL 命令清空一切,如果此时并没有执行重写,你仍然可以保存你的数据集,你只要停止服务器,删除最后一条命令,然后重启 Redis 就可以。
aof缺点
aof的文件会比rdb文件大,恢复起来相对比较慢。
AOF 可能比 RDB 慢,这取决于准确的 fsync 策略。通常 fsync 设置为每秒一次的话性能仍然很高,如果关闭 fsync,即使在很高的负载下也和 RDB 一样的快。不过,即使在很大的写负载情况下,RDB 还是能提供能好的最大延迟保证。
领取专属 10元无门槛券
私享最新 技术干货