将两个Redis实例合并为一个包含两个dbs的实例

ypo*_*dim 2 redis

我有两个Redis实例(或两个相应的dump.rdb文件),我想将它们组合成一个带有两个dbs的实例,每个实例对应一个初始实例.

我可以使用MIGRATE执行此操作,但它仅在Redis 2.6.0中可用,我当前的Redis服务器不支持.

Sri*_*nan 9

编辑

对于较新版本的redis,此答案不再准确.因历史原因留下答案.


如果您愿意使用二进制文件,可以轻松地将两个dump.rdb文件合并为一个文件.

假设:

  1. 每个转储只有一个数据库 - 默认数据库
  2. 您使用的是Redis 2.4.x,因此转储版本为2或3

如果您在十六进制编辑器中打开文件,这是RDB文件的格式 -

REDIS000x FE 00 <actual data > FF

这里 -

  • 000x是rdb版本号.在您的情况下,它很可能是0002或0003
  • FE是数据库选择器,00是数据库编号
  • <actual data>是当前数据库中的键值对.您可以将其视为当前用途的二进制blob.
  • FF 是文件中的最后一个字节,表示rdb文件的结尾

因此要合并两个rdb文件,请执行以下操作 -

  1. 创建一个新的目标文件
  2. 复制除最后一个文件之外的第一个文件中的所 FF
  3. 复制两个字节FE 01以指示第二个数据库的开始
  4. 注意:如果您确定这两个数据库没有重复的密钥,并且您希望将它们组合到一个数据库中,则只需跳过FE 01上面提到的两个字节.
  5. 从第二个文件中,跳过前11个字节 - 即跳过 REDIS000x FE 00
  6. 复制第二个文件的其余部分,包括最后一个字节 FF

您现在可以将此新dump.rdb复制到redis中的相应目录并重新启动.

如果您感兴趣,这里是redis转储文件格式的完整文档,但您不需要了解这个简单用例的所有内容.

  • 这个答案太旧了,可能是误导.现在,redis转储文件不再以FF结尾,而是使用一个字节"FF"和一个8字节的校验和.注意你不要错误地截断你的rdb文件. (2认同)