如果仅在 RAM 中存储数据的 Redis 服务器重新启动,则所有数据都会丢失。为了防止这种数据丢失,需要某种机制将数据持久化到磁盘;Redis 提供了两种机制:**快照**和**追加日志文件**,或**AOF**。您可以配置 Redis 实例以使用这两种机制中的任何一种,或组合使用。
创建快照时,数据集的整个时间点视图将写入紧凑的**。rdb**文件中的持久存储。您可以设置定期备份,例如每 1、12 或 24 小时,并使用这些备份在灾难发生时轻松恢复数据集的不同版本。您还可以使用这些快照来创建服务器的克隆,或者只是将它们保留在原位以备将来重新启动。
创建 .rdb 文件需要大量磁盘 I/O。如果在主 Redis 进程中执行,这会降低服务器的性能。这就是为什么这项工作由一个派生的子进程完成的原因。但即使是派生在数据集很大时也可能很耗时。这可能会导致性能下降,或者 Redis 无法为客户端提供服务几毫秒,甚至对于非常大的数据集可能长达一秒。了解这一点应该有助于您决定此解决方案是否适合您的要求。
您可以使用**dbfilename**和**dir**配置指令配置 .rdb 文件的名称和位置,可以通过**redis.conf**文件或通过 redis-cli 进行配置,如第 1 部分第 2 单元中所述。当然,您可以配置创建快照的频率。以下是 redis.conf 文件中显示的默认值示例。
例如,此配置将使 Redis 每 60 秒自动将数据集转储到磁盘,前提是该期间内至少更改了 1000 个键。虽然快照对于上面解释的用例来说是一个很好的策略,但它仍然存在巨大的数据丢失可能性。您可以配置快照以每隔几分钟运行一次,或者在对数据库进行 X 次写入后运行一次,但如果服务器崩溃,您将丢失自上次快照拍摄以来的所有写入。在许多用例中,这种数据丢失是可以接受的,但在许多其他用例中绝对不行。对于所有这些其他用例,Redis 提供了 AOF 持久性选项。
AOF,即追加日志文件,通过在发生写入命令时将其记录到磁盘来工作。然后,可以在服务器启动时重放这些命令,以重建原始数据集。使用与 Redis 协议本身相同的格式以追加方式记录命令。AOF 方法比快照提供更高的持久性,并且允许您配置文件同步发生的频率。
根据您的持久性要求(或者您可以承受丢失多少数据),您可以选择最适合您的用例的 fsync 策略
屏幕上显示了与 AOF 相关的配置指令。AOF 包含所有修改数据库的操作的日志,以易于理解和解析的格式。当文件变得太大时,Redis 可以自动在后台重写它,以压缩的方式只保留数据的最新状态。