我目前有一个live redis服务器运行在一个云实例,我想迁移这个redis服务器到一个新的云实例,并使用该实例作为我的新的redis服务器。如果它是MySQL,我将从旧服务器导出DB并将其导入到新服务器。我该如何用redis做到这一点?

附注:我不指望设置复制。我想完全迁移redis服务器到一个新的实例。


当前回答

Redis-dump终于为我工作了。它的文档提供了一个如何转储Redis数据库并将数据插入到另一个数据库的示例。

其他回答

现在,您还可以使用MIGRATE,从2.6开始提供。

我必须使用这个,因为我只想移动一个数据库中的数据,而不是所有数据库中的数据。这两个Redis实例位于两台不同的机器上。

如果你不能从Redis-1直接连接到Redis-2,使用ssh端口绑定:

 ssh user@redis-2.foo.com -L 1234:127.0.0.1:6379

一个小脚本,使用keys循环所有键并迁移每个键。这是Perl,但希望您能理解:

 foreach ( $redis_from->keys('*') ) {

    $redis_from->migrate(
        $destination{host},    # localhost in my example
        $destination{port},    # 1234
        $_,                    # The key
        $destination{db},
        $destination{timeout} 
    );
 }

更多信息请参见http://redis.io/commands/migrate。

Redis-dump终于为我工作了。它的文档提供了一个如何转储Redis数据库并将数据插入到另一个数据库的示例。

我发现导出/备份Redis数据(创建转储文件)的简单方法是通过命令行启动一个服务器,并创建一个动态副本,如下所示(假设源Redis在端口6379上是1.2.3.4):

/usr/bin/redis-server --port 6399 --dbfilename backup_of_master.rdb --slaveof 1.2.3.4 6379

去查查垃圾场在哪。导入redis数据时必须放置RDB,

开始客户端

$ redis-cli

and

then

redis 127.0.0.1:6379> CONFIG GET *
 1) "dir"
 2) "/Users/Admin"

这里/Users/Admin是转储的位置。从服务器读取的RDB,因此这是必须被替换的文件。

您也可以使用RDD

它可以转储和恢复一个运行的redis服务器,并允许过滤/匹配/重命名转储键