Redis 会不断地将被执行的写命令记录到 AOF 文件里面,AOF 文件会不断增大,可能会用完硬盘的所有可用空间,重启之后还原操作也可能执行很长时间。 P68
为了解决 AOF 文件不断增大的问题,用户可以向 Redis 发送 BGREWRITEAOF 命令,这个命令会通过移除 AOF 文件中冗余命令来重写 AOF 文件,使 AOF 文件变得尽可能地小。BGREWRITEAOF 的工作原理和 BGSAVE 创建快照的工作原理非常相似: Redis 会创建一个子进程, 然后由子进程负责对 AOF 文件进行重写。P68
重写 AOF 文件是从数据集中读取键当前的值,然后用一条命令取记录键值对,代替之前记录该键值对的多个命令,最终生产一个新的 AOF 文件,这个文件包含重建当前数据集所需的最少命令。
AOF 的优点AOF 文件只追加,所以写入时不需要进行 seek
AOF 文件过大时,后台会自动对 AOF 文件进行重写
有序地保存了数据库执行的所有写入操作,易读懂,也能轻松分析文件
AOF 缺点相同数据集时,AOF 文件的体积通常大于 RDB 文件的体积
根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB
个别命令(例如:BRPOPLPUSH source destination timeout)会导致 AOF 文件在重新载入时,无法将数据集恢复成保存时的原样
本文首发于公众号:满赋诸机(点击查看原文) 开源在 GitHub :reading-notes/redis-in-action