我有两个 Redis 实例(或两个各自的 dump.rdb 文件),我想将它们组合成一个带有两个 dbs 的实例,一个用于每个各自的初始实例。
我可以使用 MIGRATE 来做到这一点,但它仅在 Redis 2.6.0 中可用,我当前的 Redis 服务器不支持它。
我有两个 Redis 实例(或两个各自的 dump.rdb 文件),我想将它们组合成一个带有两个 dbs 的实例,一个用于每个各自的初始实例。
我可以使用 MIGRATE 来做到这一点,但它仅在 Redis 2.6.0 中可用,我当前的 Redis 服务器不支持它。
对于较新版本的 redis,此答案不再准确。由于历史原因留下了答案。
如果您愿意尝试一下二进制文件,您可以轻松地将两个 dump.rdb 文件合并为一个。
假设:
如果您在十六进制编辑器中打开文件,这是 RDB 文件的格式 -
REDIS000x FE 00 <actual data > FF
这里 -
000x
是 rdb 版本号。在您的情况下,它很可能是 0002 或 0003FE
是数据库选择器,00
是数据库编号<actual data>
是当前数据库中的键值对。您可以将其视为当前目的的二进制 blob。FF
是文件中的最后一个字节,表示 rdb 文件的结尾因此,要合并两个 rdb 文件,请执行以下操作 -
FF
FE 01
以指示第二个数据库的开始FE 01
上面提到的两个字节。REDIS000x FE 00
FF
您现在可以将这个新的 dump.rdb 复制到 redis 中的相应目录并重新启动。
如果您有兴趣,这里是 redis 转储文件格式的完整文档,但是对于这个简单的用例,您不需要了解所有内容。
这是我用来将 4 个 Redis 服务器(运行 2.4.x)合并为 2 个的技术(我,两次,将 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),其中 A 的数据在 db0 中,B 的数据在 db1 中。
我遇到了很多麻烦,所以我创建了一个使用转储和恢复的 python 脚本。它将一个数据库序列化为一个字典对象并对其进行图片化。使用不同的开关加载 picled 文件并将数据上传到其他 redis 实例。