*Redis migrate 命令
*语法
MIGRATE host port destination-db timeout [COPY] [REPLACE]
[AUTH password | AUTH2 username password] [KEYS key [key ...]]
以原子方式将键从源 Redis 实例传输到目标 Redis 实例。 成功时,键从原始实例中删除,并保证存在于目标实例中。
该命令是原子的,并在传输键所需的时间内阻塞两个实例,在任何给定时间,键将出现在给定实例或另一个实例中,除非发生超时错误。在 3.2 及以上版本中,可以通过将空字符串 ("") 作为键传递并添加 KEYS 子句,在单个 MIGRATE 调用中流水线传输多个键。
该命令在内部使用 DUMP 生成键值的序列化版本,并使用 RESTORE 在目标实例中合成键。源实例充当目标实例的客户端。如果目标实例返回 OK 给 RESTORE 命令,则源实例使用 DEL 删除键。
timeout 指定与目标实例通信在任何时刻的最大空闲时间(毫秒)。这意味着操作不需要在指定的毫秒数内完成,但传输应该持续进行,而不阻塞超过指定的毫秒数。
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 -- 如果 key 参数为空字符串,命令将迁移 KEYS 选项后跟的所有键(更多信息请参见上面的部分)。
- AUTH -- 使用给定密码向远程实例进行身份验证。
AUTH2-- 使用给定的用户名和密码对进行身份验证(Redis 6 或更高版本的 ACL 认证风格)。