将Redis转储还原到其他数据库

时间:2015-08-07 14:51:29

标签: redis

如何转储在数据库0上运行的redis并将其在本地计算机上的其他数据库(8)上恢复?

我已经安全地复制了转储文件:

scp hostname@/var/lib/redis/dump.rdb .

但是如果我用这个更改我的本地redis dump.rdb,我将获得数据库0的数据。如何将其恢复到特定的数据库?

2 个答案:

答案 0 :(得分:2)

首先请注意,使用编号/共享Redis数据库是不可取的。您真的应该考虑使用具有单个DB(0)的专用Redis服务器(更多信息:https://redislabs.com/blog/benchmark-shared-vs-dedicated-redis-instances

Redis没有提供直接的方法来实现这一目标,但有两种基本方法可以实现:

  1. 预处理:修改dump.rdb文件以加载到您选择的数据库中。您可以为此构建工具,也可以使用现有工具之一。 Jan-Erik在http://rdb.fnordig.de/file_format.html记录RDB v7格式方面做得非常出色,所以你需要做的就是改变Database Selector字节。

  2. 恢复后:在MOVE恢复数据库的输出上使用SCAN命令 - 应该很容易编写脚本。

答案 1 :(得分:0)

我最终在Ruby中创建了一个脚本来转储和恢复我想要的密钥。 (请注意,这种方法很慢,200个键大约需要1分钟。)

  • 获取转储/恢复的密钥

ssh hostname redis-cli --scan --pattern 'awesome_filter_pattern*'

  • 打开与生产服务器的ssh连接
  • 转储遥控钥匙

dump = ssh.exec!("redis-cli dump #{key}").chomp

  • 在localhost上恢复

$redis.connection.restore(key, 0, dump)