AOF(Append Only File)
什么是AOF?
与快照持久化通过直接保存 Redis 的键值对数据不同,AOF 持久化是通过保存 Redis 执行的写命令来记录 Redis 的内存数据。理论上说,只要我们保存了所有可能修改 Redis 内存数据的命令(也就是写命令),那么根据这些保存的写命令,我们可以重新恢复 Redis 的内存状态。AOF 持久化正是利用这个原理来实现数据的持久化与数据的恢复的
简单来说,就是以日志的形式保存的写命令放在一个.aof的文件中,只许追加文件不可以改写文件,类似于history,恢复时把这个文件中的命令重新执行一遍!
AOF保存的是appendonly.aof文件
AOF的相关配置
我们开启AOF配置文件后,在redis进行了写操作,然后退出,发现多了一个appendonly.aof文件
打开查看这个文件,发现就是我们刚才进行的写操作命令
这时候如果我们在appendonly.aof中进行了错误操作
发现无法登录
那么可以通过redis-check-aof文件进行修复。
修复成功
AOF的优点和缺点
优点:
- AOF 持久化的方法提供了多种的同步频率,即使使用默认的同步频率每秒同步一次,Redis 最多也就丢失 1 秒的数据而已。
- AOF 文件使用 Redis 命令追加的形式来构造,因此,即使 Redis 只能向 AOF 文件写入命令的片断,使用 redis-check-aof 工具也很容易修正 AOF 文件。
缺点:
- 虽然 AOF 提供了多种同步的频率,默认情况下,每秒同步一次的频率也具有较高的性能。但在 Redis 的负载较高时,RDB 比 AOF 具好更好的性能保证。
- RDB 使用快照的形式来持久化整个 Redis 数据,而 AOF 只是将每次执行的命令追加到 AOF 文件中,因此从理论上说,RDB 比 AOF 方式更健壮。官方文档也指出,AOF 的确也存在一些 BUG,这些 BUG 在 RDB 没有存在。
- AOF是文件的无限追加,文件会越来越大,恢复数据肯定是要比RDB慢!