这些多个 rdb 文件来自不同的 redis 服务器。现在我想将这些数据文件合并到一个单独的 redis 服务器上。到目前为止,我只找到了使用单个 dump.rdb 文件进行恢复的答案。
这些多个 rdb 文件来自不同的 redis 服务器。现在我想将这些数据文件合并到一个单独的 redis 服务器上。到目前为止,我只找到了使用单个 dump.rdb 文件进行恢复的答案。
DEBUG RELOAD
redis-cli
命令增加了一个新的NOSAVE
选项,该选项将会从一个RDB文件中导入数据(而不覆盖它的内存转储,并且无需停止redis-server
)。
DEBUG RELOAD [MERGE] [NOFLUSH] [NOSAVE]
将 RDB 文件保存到磁盘并重新加载到内存中。默认情况下,它会保存 RDB 文件并重新加载。
使用
NOFLUSH
选项在加载新数据库之前不会删除当前数据库,但是键冲突会导致服务器异常。当使用
MERGE
时,将加载冲突的键(加载的 RDB 文件中的键将获胜)。当使用
NOSAVE
时,服务器在加载之前不会将当前数据集保存到 RDB 文件中。当您只想加载 Redis 工作目录中放置的 RDB 文件以替换内存中的当前数据集时,请使用
DEBUG RELOAD NOSAVE
。当您想要将 Redis 当前目录中的当前 RDB 文件内容与当前内存内容合并时,请使用
DEBUG RELOAD NOSAVE NOFLUSH MERGE
。当您想要验证 Redis 能够将当前数据集持久化到 RDB 文件中、刷新内存内容并重新加载时,请使用
DEBUG RELOAD
。
以上内容摘自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
)。