Redis 持久化详解

阅读时长 5 分钟读完

Redis 是一种快速、高效、内存数据库,开发人员非常喜欢它。但是,Redis 在遇到强制性关闭(比如断电)时,所有进程正在处理的数据都将被丢失。因此,我们就需要一种方法来确保 Redis 数据的可持久性。这就是 Redis 持久化所做的事情。

Redis 有两种持久化方式:RDB 和 AOF。在本文中,我们将深入探讨这两种持久化方式的详细信息、使用场景和如何配置它们。

RDB

RDB(Redis DataBase) 是一种快速、轻量级的持久化方式,它将 Redis 数据以快照形式写入磁盘。当 Redis 在运行过程中达到一定阈值时,Redis 会自动执行一个保存操作,将内存中数据快照写入磁盘(即 RDB 文件)。当 Redis 重新启动时,可以从 RDB 文件中读取数据恢复 Redis。

RDB 的优点

  1. RDB 比 AOF 更快,因为它不需要实时地将写操作写入磁盘;
  2. RDB 文件是一个紧凑的压缩文本格式,易于备份和传输;
  3. RDB 恢复速度比 AOF 快,因为只需要读取一个文件。

RDB 的缺点

  1. RDB 数据存储是一个周期性的操作,并不是实时的,因此可能会在最后一次 RDB 后出现数据丢失的情况。
  2. RDB 大小和操作系统的文件大小限制有关,因此如果文件过大,RDB 操作可能会阻塞 Redis 的主线程。

配置 RDB

  1. 配置保存时间间隔

默认情况下,Redis 会在 900 秒后自动将数据写入磁盘。您可以通过在配置文件中设置 save 指令来改变这个值。

这里的 60 表示在 60 秒之后 Redis 将进行一次保存操作,1000 表示在一次操作中有至少 1000 个 key 发生变化。这样设置可以确保我们的数据不会丢失,因为接收到断电或强制退出的 Redis 会发生一定数量的自动保存。在 Redis 官方文档中,建议您至少将 save 设置为 60 300(1 小时内进行一次操作的键数为 300 或更多)。

  1. 手动保存

您也可以通过执行 SAVE 或 BGSAVE 命令在不同的时间内进行手动保存操作。 SAVE 命令会导致 Redis 阻塞,直到保存操作完成。而 BGSAVE 命令会在后台异步进行保存操作,不会阻塞 Redis 主线程。

AOF

AOF(Append Only File) 是另一种持久化方式,Redis 会将执行的每个写操作追加到文件末尾。当 Redis 重新启动时,Redis 会读取 AOF 文件,并执行相应的写操作进行恢复。

AOF 的优点

  1. 可以保证在 Redis 断电或异常关闭的情况下最小化数据丢失的情况;
  2. 恢复数据精确度高,并且没有任何混淆。

AOF 的缺点

  1. 比 RDB 操作慢,因为每个写操作都会实时写入文件中;
  2. AOF 文件比 RDB 大,不易于备份和传输。

配置 AOF

  1. 打开 AOF

默认情况下,Redis 会禁用 AOF。您可以打开 AOF,通过在配置文件redis.conf中将“appendonly”指令值设置为 yes。

  1. 配置 AOF 保存时间间隔

您可以设置 AOF 持久化间隔的其他“重写 AOF 开销”指令值,以及“ AOF 文件增量大小的阈值”。如下所示:

这里,auto-aof-rewrite-percentage 定义了我们每次重写 AOF 文件的增量,如果 AOF 文件大于 100%,我们将触发重写操作。而 auto-aof-rewrite-min-size 定义了重写文件的最小大小。一般而言,重写操作必须执行在磁盘空间充足的情况下。

Redis 持久化的最佳实践

配置 RDB 和 AOF

建议您同时使用 RDB 和 AOF。在採用 RDB 时,我们可以避免 AOF 文件过大导致 AOF 恢复时间过长的情况,并可以避免重写。同时,AOF 可以提供更高的数据可靠性,可以在数据丢失时作为备份恢复之用。

数据存储

在 Redis 中,如果您将数据作为内存,Redis 将非常快。但要注意,如果您需要持久化数据,则它的大小不能超过可用内存的一定百分比。这样的比率可以根据您在 redis.conf 文件中的“maxmemory”指令值进行设置。

此外,使用 Redis Cluster 来在多个服务器之间共享数据也非常有用。在此方案中,每个节点都只存储在其内存中,但在发生节点故障时,可以使用持久化方法恢复数据。

升级和重写

当升级 Redis 时,请确保您在升级之前对数据进行了备份。如果需要开启和关闭持久化以更新配置,请先执行 BGSAVE 命令以保存更新之前的状态。

在使用 AOF 时,如果您发现 AOF 文件过大,可以使用 BGREWRITEAOF 命令将文件重写为只包含最少命令集合。同时,建议使用 AOF 的专有工具,如 aof-rewrite-tool,可以将重写操作分解为子操作。

示例如下:

结论

Redis 持久化是关键的数据库维护操作之一,确保将数据写入磁盘,以免丢失数据和保持数据一致性。在升级或更改持久化配置时,请始终注意先进行备份,并始终注意内存使用情况。

然而,无论你使用哪种持久化方式,都要明白它们的优缺点和适用场景,根据自己的需求选择最佳的持久化方式。

—————————————————————————

作者:小菜鸟Jacck

链接:https://www.jianshu.com/p/16f5b5a30458

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6774c3b26d66e0f9aaf0305c

纠错
反馈