什么是 AOF?
AOF 是 Append Only File 的意思,它是指 Redis 在持久化数据到硬盘的时候是以日志的形式来记录每个写操作,并保存到磁盘的一个文件中,这个文件的名字默认叫 appendonly.aof
。
如何设置 Redis 以 AOF 的形式持久化?
修改 redis.conf 中的 appendonly 的值为 yes。
这样在 redis 启动的时候,就会自动执行 appendonly.aof 文件中的写操作来将数据加载到内存。
如何修复 appendonly.aof 文件?
如果 appendonly.aof 文件被破坏了(文件的内容被篡改了),怎么修复?
执行:redis-check-aof --fix appendonly.aof
就可以修复,然后重启 redis 即可。
ps:这个命令它会把发生错误的命令之后的部分清掉。但是,这个修复命令不是万能的,如果文件被改的太惨,修复其实就是清空整个文件(比如,在文件头部进行修改)。
如何配置 AOF 的持久化策略?
仍然是修改配置文件:
-
appendfsync always
:每个操作都会被记录到磁盘,性能差但是数据完整性比较好。 -
appendfsync everysec
(默认):每秒进行一次持久化,如果一秒内宕机,那一秒内的数据就会丢失。 -
appendfsync no
:不进行持久化。
AOF 优点?
- 数据的一致性高
AOF 缺点?
-
相同数据量的 aof 文件相比于 rdb 文件占用的磁盘空间较大。
-
redis 运行 aof 文件的速度比 rdb 文件慢。
如何在 RDB 和 AOF 两种持久化策略之间做选择?
-
如果对数据的一致性要求比较高,建议使用 AOF。
-
大部分情况建议采用 RDB。
-
如果你只希望数据在 Redis 服务运行的时候存在,那么可以不开启任何一种持久化策略。
总结
FAQ
如果同时启用 RDB 和 AOF 这两种策略,那么 Redis 会加载哪个文件?
答:会优先加载 appendonly.aof 文件中的数据,就算只有 dump.rdb 文件,没有 appendonly.aof 文件,redis 也不会加载 dump.rdb 文件中的数据。
那要不要只使用 AOF 呢?
答:建议不要,因为 RDB 更适合于备份数据库,快速重启,AOF 启动慢,执行效率也慢(因为要经常存盘)。