当前位置: 首页 > 知识库问答 >
问题:

如果Redis中的数据量很大,RDB比AOF更可取吗?

秦渝
2023-03-14

我正在运行一个Redis实例,其最大内存和使用量约为25GB。它在Kubernetes中作为状态集运行。因为redis吊舱可以被调度到任何盒子,并且可以在任何时候通过RDB进行AOF备份时重新启动。

但是,昨天redis吊舱重新启动,加载数据花了大约5分钟,这让我想到,如果数据很大,RDB备份是否更适合?

  • 我知道,AOF文件大小可以超过,并自动重写以优化。
  • 但是即使在100%优化的状态下,如果数据库必须重新启动,IMO也需要整个时间来调用所有命令,这些命令将把数据填满回25GB,这将是耗时的。(大约5分钟,我监控了)
  • 我想减少这个时间并考虑返回RDB快照,虽然数据会丢失,但这是快速启动时间的权衡。将安排更短的BGSAVE时间,以避免或减少数据丢失。

我想知道,如果数据量很大,并且您希望避免启动时间较慢,是否最好使用RDB备份?如果每隔5或10分钟运行一次BGSAVE,那么数据大小是否很大(大于15GB)是一种好做法?

(此外,大数据量可能不够大,其他人可能无法使用,但这与启动时间有关,我担心,以及由此带来的停机时间)

共有1个答案

解博明
2023-03-14

我是OP。

不是答案,但我想分享一些实验后收集的数据

>

  • 我用16.5GB的数据填充Redis DB,使用以下命令调试填充165000000 PHPREDIS_会话

    然后我在-BGREWRITEAOF的帮助下重写/优化AOF文件,整个操作耗时209秒:
    aof_last_rewrite_time_sec:209

    就在重写之后,我重新启动了Redis实例,用了3分钟将整个数据恢复到16.5Gb的Redis内存中

    在此之后,我关闭了AOF并启用了RDB备份,并调用BGSAVE开始备份。它花了202秒才完成:rdb\u last\u bgsave\u time\u sec:202

    在RDB备份之后,我再次重新启动了Redis实例,整个数据集在Redis内存中恢复大约需要3分钟,与AOF差不多。

    看起来RDB和100%优化的AOF文件将或多或少地花费相同的时间来恢复数据。

    如果不优化或重写AOF,可能需要更多的时间,因为Redis将运行更多的命令来恢复数据。

    我还测试了具有25GB数据的Redis实例的启动时间,并且启用了AOF,恢复数据需要4m30。

    注:上述数据仅通过一次迭代获得,vanilla Redis没有任何调整。这些数字可能与其他情况或配置不匹配。我只是想分享我的发现。

  •  类似资料:
    • 这个问题是关于Redis持久性的。 我正在使用redis作为社交网站的“快速后端”。这是一个单一的服务器设置。我一直在将PostgreSQL的职责稳步转移到Redis。目前在中,附加设置设置设置为。快照设置为,,。所有这些对于生产和开发都是如此。根据生产日志,被大量调用。这是否意味着实际上,我每60秒就会得到一次备份? 一些文献建议同时使用AOF和RDB备份。因此,我正在权衡是否打开appendo

    • 在redis 4.0中,讨论了一个新的混合RDB AOF,在redis更改日志中输入链接描述: 混合RDB-AOF格式。如果启用,则在重写AOF文件时使用新格式:重写使用更紧凑、更快的格式生成RDB格式,并将AOF流附加到文件中。这允许在使用AOF持久性时更快地重写和重新加载 我想知道如何在redis配置文件中设置此配置?

    • 问题内容: 如何完全禁用RDB和AOF?我不在乎持久性,只希望它存在于内存中。 我已经注释掉了: 但这并没有帮助,我发现Redis仍尝试写入磁盘。我知道Redis希望写入磁盘,因为出现以下错误:“无法打开.rdb进行保存:权限被拒绝” 我不在乎该错误,因为我想完全禁用持久性。 问题答案: 如果要更改正在运行的Redis,请登录Redis,然后 禁用aof : 禁用rdb : 如果要在重新启动Red

    • 如何完全禁用RDB和AOF?我不在乎持久性,只希望它出现在内存中。 我已经注释了: 但这并没有起到任何作用,我看到Redis仍在尝试写入磁盘。我知道Redis想写入磁盘,因为我遇到了这样一个错误:“打开失败。用于保存的rdb:权限被拒绝” 我不在乎错误,因为我想完全禁用持久性。

    • 我正在寻找备份我的Redis数据的最佳方法。 我读到了RDB和AOF。但根据我的想法,最好的方法是以以下方式组合: 定期创建RDB,并仅从该点保存AOF。 这样,当您重新启动时。Redis可以恢复RDB文件(比整个AOF回滚更快),然后在最后几秒钟回滚AOF文件。 AOF文件包含自上次RDB以来的每一次写入。 我的问题是,这在Redis中可用吗?或者这有什么不好的地方吗?

    • 我们有一个使用默认配置运行但启用了AOF的Redis服务器。出于性能原因,我们希望禁用AOF,而只使用RDB。 如果我们使用重新启动Redis实例,所有键都将丢失。谢天谢地,使用再次重新启动会将我们的数据返回给我们。 redis文档展示了如何从RDB迁移到AOF,但是从AOF迁移到RDB的正确方法是什么?