Redis提供了两种方式进行数据库的持久化:
- RDB:RDB是redis默认的数据持久化配置,在配置的某个时间点下保存内存中数据的快照到rdb文件中(默认dump.rdb)。
- AOF(Append only file):Redis在每次尽心数据写入操作时会更新AOF文件(默认appendonly.aof), AOF文件中会以文本方式记录redis的数据操作。
RDB与AOF的优缺点:
RDB优点:
-
RDB是很紧凑的文件,通过该文件保留redis数据某个时间点的快照,对于需要进行某个时间点数据备份以进行灾难恢复的功能,这是一个很好的方案。
-
文件较小,方便数据传输。
-
相比aof文件在redis重启时通过rdb文件加载更快。
RDB缺点:
-
RDB文件仅是一个时间点下的快照,不能最大限度保证数据的安全性。
-
RDB文件写入需要fork出一个子进程,在处理大量数据时会耗时较长、占用系统资源较多; AOF方式也需要fork出子进程,但AOF方式可以调节写入频率, 而且不会影响到数据的持久性。
-
rdb文件在不同版本间更容易出现兼容性问题,可能导致redis服务启动失败。
AOF优点:
-
更可靠,可以设置fsync不进行文件写入、每秒同步、每次查询同步,通常配置fsync为每秒同步就可以提供很好的保障。
-
AOF是append only的,不会导致文件损坏,遇到断电等情况,可以通过redis-check-aof工具进行修复。
-
在aof文件过大时,可以通过BGREWRITEAOF命令优化aof文件。
-
aof更好维护、可读性强。
AOF缺点:
-
与rdb文件相比,aof文件通常大得多。
-
在某些fsync策略下,aof比rdb方式写入更慢,但在fsync配置为erversec的情况下,性能已经足够好。
-
aof在使用某些查询指令是存在罕见的bug,但通常都不会遇到。
通常推荐同时使用aof和rdb两种持久化策略,可以提供堪比postgresql的数据可靠性,同时依靠rdb文件可以便于数据备份, 使用rdb文件也可以在重启时更快载入数据。