我有两个Redis的情况下(或两个各自dump.rdb文件),我想他们两个DBS,每一个相应的初始实例结合成一个单一实例。
我可以做到这一点使用迁徙,但它只是在Redis的2.6.0,这不是由我目前的Redis服务器支持可用。
我有两个Redis的情况下(或两个各自dump.rdb文件),我想他们两个DBS,每一个相应的初始实例结合成一个单一实例。
我可以做到这一点使用迁徙,但它只是在Redis的2.6.0,这不是由我目前的Redis服务器支持可用。
这个答案不再是准确的Redis的的新版本。 离开历史原因的答案。
如果你愿意玩了一下周围二进制文件,您可以轻松地在两个dump.rdb文件合并成一个。
假设:
如果你在一个十六进制编辑器打开该文件,这是RDB文件的格式 -
REDIS000x FE 00 <actual data > FF
这里 -
000x
是RDB版本号。 这很可能是技术或者0003你的情况 FE
是数据库选择器, 00
是数据库数 <actual data>
是在当前数据库中的键-值对。 你可以把这个作为当前的意图二进制BLOB。 FF
是文件中的最后一个字节,并指示RDB文件的末尾 因此,合并两个RDB文件,请执行下列操作 -
FF
FE 01
,表示第二个数据库的开始 FE 01
如上所述。 REDIS000x FE 00
FF
现在,您可以在Redis的并重新启动这个新dump.rdb复制到相应的目录。
如果你有兴趣, 这里是Redis的的完整文档转储文件格式 ,但你并不需要了解这一切对于这个简单的用例。
下面是我用于合并4台Redis的服务器(运行的2.4.x)到2(I,两次含有两个分开的DBS,合并的2个独立的Redis实例(每个与DB0数据)转换成1)的技术:
redis.conf
和使用slaveof
)。 sed -e 's/\"db\":0/\"db\":3/' orig.json > db_3.json
redis-load
命令导入包含从实例B中的数据转化为富JSON文件。 <new.json redis-load -u host:port -d 3
现在你有一个在DB0数据和B在DB1数据的单一实例的Redis(美孚)。
我有很多与它的烦恼,所以我创建了一个使用dump和restore一个Python脚本。 它系列化1分贝Dictionary对象和picles它。 与不同的开关的picled文件被加载并在数据被上传到其它redis的实例。
https://gist.github.com/romanmah/9664407