Redis提供了不同的持久化选项:
- RDB持久化,数据集的时间点快照
- AOF持久化,服务器收到的每一个写操作
- 可以同时使用AOF和RDB。在这种情况下,当Redis重启的以后,AOF将用于重新构建原始数据集,因为它保证是最完整的数据。
RDB的优点:
- RDB是数据的时间点快照。对于备份而言,RDB文件是完美的。你可能想要归档最近的24小时内每个小时的RDB文件,并且每个归档保存30天。这允许你再灾难发生的时候开业轻松地恢复数据集到不同版本。
- RDB对于灾难恢复非常好,因为一个紧凑的文件可以传输到远程数据中心
- RDB最大化了Redis的性能,因为Redis父进程为了持久化需要做的唯一工作就是分配一个子进程,而子进程可以完成所有的工作。
- 与AOF相比,RDB允许使用大数据集更快地重新启动。
RDB的不足:
- 如果你希望当Redis停止工作的时候能把数据丢失减少到最小,那么RDB不是一个好主意。假设你设置每5分钟创建一个RDB快照,那么当Redis非正常退出是,你可能会丢失最近几分钟的数据。
- 为了持久化到磁盘,RDB需要fork()一个子进程。如果数据很大,fork()可能会很耗时,如果数据非常大,CPU性能不太好,那么可能在几毫秒甚至一秒内停止为客户端提供服务。AOF也许fork(),但是你可以调整写日志的频率,而不需要在持久性上进行权衡(
(小结:
RDB的优点:
1、对于备份很方便的,将来可以快速重启,并且可以恢复到不同的版本
2、数据可以很方便的传输到数据中心
RDB的缺点:
1、如果突然宕机,可能会丢失一部分数据
2、如果数据很大,fork()操作会耗时很长,严重的情况下可能短时间内无法为客户端提供服务
)
AOF的优点:
- 你可以有不同的fsync策略:完全不fsync,每秒fsync,每个查询都fsync。fsync的默认策略是每秒执行一次,但是你最多只会丢失一秒钟内的写操作。
- AOF日志是追加的,不用担心断电的问题,即使日志写到一半,使用redis-check-aof工具也可以轻松修复。
- 当AOF文件变得太多时,Redis可以自动重写AOF
- AOF以一种易于理解和解析的格式,一个接一个地包含所有操作的日志。你可以很容易的导出一个AOF文件。
AOF的不足:
- 对于相同的数据,AOF文件通常比RDB文件更大
- AOF可能会比RDB更慢,当然这取决于fsync策略。一般而言,fsync设置为每秒性能是最高的。
(小结:
AOF的优点:
1、它保存的是写操作,写多少是多少,而RDB必须要写完整,写到一半的RDB是不能用的
2、格式易于理解和解析
3、文件过大时,可以自动重写AOF
AOF的缺点:
1、对于相同的数据,AOF文件通常比RDB文件更大。因为AOF记录的是操作,而RDB记录的是数据,是快照
)
如果你非常关心你的数据,但是在发生灾难时仍然可以忍受几分钟的数据丢失,那么你可以只使用RDB。
有许多用户单独使用AOF,但我们不鼓励这样做,因为对于数据备份和快速重启来说,不停的地使用RDB快照是个好主意。