Redis提供了两种持久化方式:RDB,AOF
RDB:
RDB是Redis用来进行持久化的一种方式,是把当前内存中的数据集快照写入磁盘,也就是 Snapshot 快照(数据库中所有键值对数据)。恢复时是将快照文件直接读到内存里。
通过保存数据库中的键值对来记录数据库的状态。
RDB 有两种触发方式,分别是自动触发和手动触发。
优点:
(1)节省磁盘空间,生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
(2)恢复速度快。
(3)适合大规模的数据恢复。
缺点:
(1)因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作,fork时,内存中数据被复制了一份,大致两倍的膨胀性需要考虑
(2)最后一次持久化之后的数据可能会丢失
AOF:
AOF 被称为追加模式,或日志模式,是 Redis 提供的另一种持久化策略,它能够存储 Redis 服务器已经执行过的的命令,并且只记录对内存有过修改的命令,这种数据记录方法,被叫做“增量复制”,其默认存储文件为appendonly.aof。
通过保存Redis服务器所执行的写命令来记录数据库状态。
优点:
(1)丢失数据概率低。AOF 持久化的方法提供了多种的同步频率,即使使用默认的同步频率每秒同步一次,Redis 最多也就丢失 1 秒的数据而已。
(2)AOF 文件使用 Redis 命令追加的形式来构造,因此,即使 Redis 只能向 AOF 文件写入命令的片断,使用 redis-check-aof 工具也很容易修正 AOF 文件。
缺点:
(1)比RDB占用更多磁盘空间。
(2)恢复备份速度慢
(3)每次读写都同步的话,有一定的性能压力。
(4)RDB 使用快照的形式来持久化整个 Redis 数据,而 AOF 只是将每次执行的命令追加到 AOF 文件中,因此从理论上说,RDB 比 AOF 方式更健壮。官方文档也指出,AOF 的确也存在一些 BUG,这些 BUG 在 RDB 没有存在。