迁移

Syntax
MIGRATE host port <key | ""> destination-db timeout [COPY] [REPLACE]
  [AUTH password | AUTH2 username password] [KEYS key [key ...]]
Available since:
2.6.0
Time complexity:
This command actually executes a DUMP+DEL in the source instance, and a RESTORE in the target instance. See the pages of these commands for time complexity. Also an O(N) data transfer between the two instances is performed.
ACL categories:
@keyspace, @write, @slow, @dangerous,

原子性地将一个键从源Redis实例传输到目标Redis实例。 成功后,该键将从原始实例中删除,并保证存在于目标实例中。

该命令是原子的,并在传输键所需的时间内阻塞两个实例,在任何给定时间,键将出现在一个实例或另一个实例中,除非发生超时错误。在3.2及以上版本中,可以通过传递空字符串("")作为键并添加KEYS子句,在单个MIGRATE调用中管道传输多个键。

该命令内部使用DUMP生成键值的序列化版本,并使用RESTORE在目标实例中合成键。 源实例充当目标实例的客户端。 如果目标实例对RESTORE命令返回OK,源实例将使用DEL删除键。

超时时间指定了与目标实例通信的任何时刻的最大空闲时间,单位为毫秒。 这意味着操作不需要在指定的毫秒数内完成,但传输应在不超过指定毫秒数的时间内取得进展,而不会阻塞。

MIGRATE 需要执行I/O操作并遵守指定的超时时间。 在传输过程中发生I/O错误或达到超时时间时, 操作将被中止并返回特殊错误 - IOERR。 当这种情况发生时,可能会出现以下两种情况:

  • 密钥可能同时存在于两个实例上。
  • 键可能仅在源实例中。

在发生超时的情况下,键不会丢失,但调用MIGRATE的客户端在发生超时错误时,应检查键是否存在于目标实例中,并相应地采取行动。

当返回任何其他错误(以ERR开头)时,MIGRATE保证键仍然仅存在于源实例中(除非目标实例上已经存在同名的键)。

如果源实例中没有要迁移的键,则返回NOKEY。 因为在正常情况下,例如由于过期,可能会缺少键, NOKEY不是错误。

使用单个命令调用迁移多个键

从 Redis 3.0.6 开始,MIGRATE 支持一种新的批量迁移模式,该模式使用流水线技术来在实例之间迁移多个键,从而避免了每次使用单个 MIGRATE 调用移动每个键时产生的往返时间延迟和其他开销。

为了启用此表单,使用了KEYS选项,并将普通的key参数设置为空字符串。实际的键名将在KEYS参数本身之后提供,如下例所示:

MIGRATE 192.168.1.34 6379 "" 0 5000 KEYS key1 key2 key3

当使用此表单时,NOKEY状态码仅在实例中不存在任何键时返回,否则即使只存在一个键,命令也会被执行。

选项

  • COPY -- 不要从本地实例中移除密钥。
  • REPLACE -- 替换远程实例上的现有键。
  • KEYS -- 如果键参数是一个空字符串,命令将迁移所有跟随KEYS选项的键(更多信息请参见上面的部分)。
  • AUTH -- 使用给定的密码对远程实例进行身份验证。
  • AUTH2 -- 使用给定的用户名和密码对进行身份验证(Redis 6 或更高版本的 ACL 身份验证样式)。

RESP2/RESP3 回复

以下之一:


历史

  • 从 Redis 版本 3.0.0 开始:添加了 COPYREPLACE 选项。
  • 从 Redis 版本 3.0.6 开始:添加了 KEYS 选项。
  • 从Redis版本4.0.7开始:添加了AUTH选项。
  • 从 Redis 6.0.0 版本开始:添加了 AUTH2 选项。
RATE THIS PAGE
Back to top ↑