用于单个数据库的Redis SLAVEOF

用于单个数据库的Redis SLAVEOF,redis,amazon-elasticache,Redis,Amazon Elasticache,我希望从一个新的redis box运行SLAVEOF命令,将数据从Elasticache节点迁移到运行redis的正常EC2 box。理想情况下,我会运行类似于SLAVEOF IP DB_INDEX的程序,这样我只从主服务器上的DB_INDEX中提取数据,而不是从所有可用的数据库中提取数据。这可能吗?不,您不能在Redis中只复制一个“数据库”。更容易将这些视为“键空间”,而不是单个数据库。此外,根据Elasticache的文档,导入数据的方法是上传快照(RDB文件)——而不是通过复制命令 由于

我希望从一个新的redis box运行
SLAVEOF
命令,将数据从Elasticache节点迁移到运行redis的正常EC2 box。理想情况下,我会运行类似于
SLAVEOF IP DB_INDEX
的程序,这样我只从主服务器上的
DB_INDEX
中提取数据,而不是从所有可用的数据库中提取数据。这可能吗?

不,您不能在Redis中只复制一个“数据库”。更容易将这些视为“键空间”,而不是单个数据库。此外,根据Elasticache的文档,导入数据的方法是上传快照(RDB文件)——而不是通过复制命令

由于您正在进行迁移,您可以:

  • 复制到一个干净的实例
  • 迭代所有不需要的数据库,并执行
    FLUSHDB
    (不要执行
    FLUSHALL
  • 然后,如果您希望数据位于DB0上,但它不在那里,那么可以使用每个键上的命令将其放入默认的0数据库中

  • 这将导致您的新实例在“0”数据库中只包含您想要的数据-如果您选择移动键。

    AFAIK这是不可能的。请参阅文档以了解。PS:我以前在一个新的EC2实例上把Elasticache复制到redis服务器上,它工作得非常完美。谢谢你,比尔。实际上,我们正走另一条路(Elasticache->EC2),因此SLAVEOF命令使事情变得更容易,因为我们不必担心迁移过程中产生的增量。根据tobiash在上面的评论,我们似乎不能做我们希望做的事情,老实说,这不是世界末日,只要你能向EC2实例发布slaveof,这涵盖了我的回答中的第1项。如果这还不够清楚,我道歉。我不知道为什么我把关于去那里的部分忘了。当然,从开始第2步的那一刻起,您将有一个增量。但是考虑到你不能复制一个DB,我相信这是你能得到的最好的。这是我建议避免使用select命令的原因之一。