我有两个Redis实例(或两个相应的dump.rdb文件),我想将它们组合成一个带有两个dbs的实例,每个实例对应一个初始实例。
我可以使用MIGRATE执行此操作,但它仅在Redis 2.6.0中可用,我当前的Redis服务器不支持。
答案 0 :(得分:9)
对于较新版本的redis,此答案不再准确。因历史原因留下答案。
如果您愿意使用二进制文件,可以轻松地将两个dump.rdb文件合并为一个。
假设:
如果在十六进制编辑器中打开文件,则这是RDB文件的格式 -
REDIS000x FE 00 <actual data > FF
这里 -
000x
是rdb版本号。在您的情况下,它很可能是0002或0003 FE
是数据库选择器,00
是数据库编号<actual data>
是当前数据库中的键值对。您可以将其视为当前用途的二进制blob。FF
是文件中的最后一个字节,表示rdb文件的结尾因此要合并两个rdb文件,请执行以下操作 -
FF
FE 01
以指示第二个数据库的开始FE 01
。REDIS000x FE 00
FF
现在可以将这个新的dump.rdb复制到redis中的相应目录并重新启动。
如果您有兴趣here is complete documentation of redis dump file format,但是您不需要为这个简单的用例理解所有内容。
答案 1 :(得分:3)
这是我用来将4台Redis服务器(运行2.4.x)合并为2(I,两次,将2个独立的Redis实例(每个都包含db0中的数据)合并为1包含两个单独的dbs)的技术:
redis.conf
并使用slaveof
)。sed -e 's/\"db\":0/\"db\":3/' orig.json > db_3.json
redis-load
命令将包含实例B中数据的JSON文件导入Foo。
<new.json redis-load -u host:port -d 3
现在你有一个Redis实例(Foo),db1中的A数据和db1中的B数据。
答案 2 :(得分:0)
我遇到了很多麻烦,所以我创建了一个使用转储和恢复的python脚本。 它将一个db序列化为一个字典对象并将其打包。使用不同的交换机,将加载picled文件,并将数据上载到其他redis实例。