迁移
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 实例。 成功后,密钥将从原始实例中删除,并保证 存在于目标实例中。
该命令是原子的,并在所需的时间内阻止两个实例
transfer 键,则在任何给定时间,该键似乎存在于给定的
实例或其他实例,除非发生超时错误。在 3.2 和
上面,可以在对MIGRATE
通过
空字符串 (“”) 作为键,并添加KEYS
第。
该命令在内部使用DUMP
生成密钥的序列化版本
value 和RESTORE
以便在目标实例中合成 key。
源实例充当目标实例的客户端。
如果目标实例对RESTORE
command 的
使用 删除密钥DEL
.
超时指定通信任何时刻的最大空闲时间 替换为目标实例(以毫秒为单位)。 这意味着该作不需要在指定的 的毫秒数,但传输应该在没有 阻塞时间超过指定的毫秒数。
MIGRATE
需要执行 I/O作并遵守指定的超时。
当传输过程中出现 I/O 错误或达到超时时,
作中止,并且出现特殊错误 -IOERR
返回。
发生这种情况时,可能会出现以下两种情况:
- 密钥可能位于两个实例上。
- 该密钥只能位于源实例中。
在超时的情况下,密钥不可能丢失,但
客户端调用MIGRATE
,如果出现超时错误,应检查
key 也存在于目标实例中,并执行相应的作。
当返回任何其他错误时(以ERR
) MIGRATE
保证
该密钥仍然仅存在于原始实例中(除非具有
目标实例上也已存在相同的名称)。
如果源实例中没有要迁移的 KeyNOKEY
返回。
因为在正常情况下可能会丢失密钥,例如从到期开始,NOKEY
不是错误。
使用单个命令调用迁移多个键
从 Redis 3.0.6 开始MIGRATE
支持新的批量迁移模式
使用 pipelining 在实例之间迁移多个键,而无需
产生往返时间、延迟和其他开销
当使用单个MIGRATE
叫。
为了启用此表单,KEYS
option,并且 normal key 参数设置为空字符串。将提供实际的密钥名称
在KEYS
参数本身,如下例所示:
MIGRATE 192.168.1.34 6379 "" 0 5000 KEYS key1 key2 key3
使用此表单时,NOKEY
仅当 None 时返回 Status Code
的键,否则执行命令,即使
只有一个密钥存在。
选项
COPY
-- 不要从本地实例中删除密钥。REPLACE
-- 替换远程实例上的现有密钥。KEYS
-- 如果 key 参数为空字符串,则命令将迁移KEYS
选项(有关更多信息,请参阅上一节)。AUTH
-- 使用给定的密码对远程实例进行身份验证。AUTH2
-- 使用给定的用户名和密码对(Redis 6 或更高版本的 ACL 身份验证样式)进行身份验证。
RESP2/RESP3 回复
以下选项之一:
历史
- 从 Redis 版本 3.0.0 开始:添加了
COPY
和REPLACE
选项。 - 从 Redis 版本 3.0.6 开始:添加了
KEYS
选择。 - 从 Redis 版本 4.0.7 开始:添加了
AUTH
选择。 - 从 Redis 版本 6.0.0 开始:添加了
AUTH2
选择。