如何从多个RDB文件中恢复Redis



多个 rdb 文件来自不同的 redis 服务器。现在我想将数据文件合并到一个 redis 服务器。到目前为止,我只找到使用单个dump.rdb文件恢复的答案。

从 Redis 6.0 开始,DEBUG RELOADredis-cli命令获得了一个新的NOSAVE选项,该选项将从 RDB 文件中提取数据(不会用内存转储覆盖它,也不需要停止redis-server)。

DEBUG RELOAD [MERGE] [NOFLUSH] [NOSAVE]

将 RDB 保存在磁盘上,然后将其重新加载到内存中。默认情况下,它将 保存 RDB 文件并重新加载。

使用NOFLUSH选项,在加载新数据库之前不会删除当前数据库,而是 密钥冲突将杀死服务器,但有例外。

MERGE使用的,将加载冲突的密钥(加载的RDB 文件中的密钥 会赢)。

使用NOSAVE时,服务器不会保存当前 加载前 RDB 文件中的数据集

在以下情况下使用DEBUG RELOAD NOSAVE你只想加载你放在 Redis 中的 RDB 文件工作 目录,以替换内存中的当前数据集。

DEBUG RELOAD NOSAVE NOFLUSH MERGE当您想要添加 当前 RDB 文件放置在 Redis 当前目录中,其中 当前内存内容。

当您想要验证 Redis 时使用DEBUG RELOAD能够将当前数据集保留在 RDB 文件中,刷新 内存内容,并将其加载回去。

以上内容取自debug.c,应用的友好格式(参见 Redis 7.0 的 debug.c 源代码)。

因此,如果要确保不同的 RDB 中没有重复的键,请使用DEBUG RELOAD NOSAVE NOFLUSH。 使用DEBUG RELOAD NOSAVE NOFLUSH MERGE如果您知道自己有重复项,请最后加载您想要优先的键。

注意:低于 6.0 的 Redis 版本(没有 NOSAVE 选项,请参阅 Redis 5.0 的 debug.c 源代码)DEBUG RELOAD总是从用内存转储覆盖文件开始,这是静默失败的一个示例,因为redis-cli会在DEBUG RELOAD后接受任何不存在的选项,不仅仅是"可能"的选项,例如NOSAVE,而且完全是人为的, 如NOSAVING FAILS IN REDIS50)。

最新更新