MIGRATE

语法
MIGRATE host port <key | ""> destination-db timeout [COPY] [REPLACE]
  [AUTH password | AUTH2 username password] [KEYS key [key ...]]
自何版本起可用
2.6.0
时间复杂度
此命令实际上在源实例上执行 DUMP+DEL,并在目标实例上执行 RESTORE。有关时间复杂度,请参阅这些命令的页面。此外,还会在两个实例之间执行 O(N) 数据传输。
ACL 类别
@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 选项,并将正常的参数设置为一个空字符串。实际的键名称将在 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 ↑