Redis命令:MIGRATE

Redis MIGRATE 命令详细教程

MIGRATE 用于将一个或多个 Key 从当前 Redis 实例原子地迁移到另一个 Redis 实例。迁移过程中 Key 不会同时存在于两个实例,操作是原子的:在任意时刻,Key 要么在源实例,要么在目标实例。MIGRATE 常用于在线数据迁移、集群扩容、数据搬迁等场景。

本文基于 Redis 通用 Key 操作介绍 MIGRATE。Redis 命令本身不区分大小写,因此 MIGRATEmigrateMigrate 的效果相同;文档统一使用大写形式。MIGRATE 自 Redis 2.6 起可用,COPYREPLACE 选项从 Redis 3.0 开始支持,KEYS 选项从 Redis 3.0.6 开始支持,AUTH 从 Redis 4.0 开始支持,AUTH2 从 Redis 6.0 开始支持。

资料合集:https://pan.quark.cn/s/10e98d308913https://pan.quark.cn/s/f56bc69c5338

一、命令概览

1. 基本语法

redis 复制代码
MIGRATE host port key|"" destination-db timeout
  [COPY] [REPLACE]
  [AUTH password | AUTH2 username password]
  [KEYS key [key ...]]

参数说明:

参数 说明
host 目标 Redis 实例的主机地址
port 目标 Redis 实例的端口
key 要迁移的单个 Key,或使用空字符串 "" 配合 KEYS 选项迁移多个 Key
destination-db 目标实例的逻辑数据库编号(如 01
timeout 超时时间,单位为毫秒,是 I/O 操作的最大等待时间
COPY 迁移后不在源端删除 Key(默认行为是删除源端 Key)
REPLACE 替换目标实例上已存在的同名 Key(默认遇到同名 Key 会返回错误)
AUTH password 目标实例的密码认证(Redis 4.0+)
AUTH2 username password 目标实例的 ACL 用户名和密码认证(Redis 6.0+)
KEYS key [key ...] 迁移多个 Key,此时 key 参数传空字符串 ""

返回值:

场景 返回值
迁移成功 OK
源端 Key 不存在 NOKEY

2. 最简单的示例

假设目标实例运行在 192.168.1.100:6380,将当前实例的 user:1001 迁移过去:

redis 复制代码
SET user:1001 "Alice"
MIGRATE 192.168.1.100 6380 user:1001 0 5000

返回:

text 复制代码
OK

迁移成功后,user:1001 从当前实例删除,出现在目标实例的 DB 0 中。

在目标实例上验证:

redis 复制代码
SELECT 0
GET user:1001

返回:

text 复制代码
"Alice"

二、MIGRATE 的基本用法

1. 迁移单个 Key

redis 复制代码
SET session:abc123 "token-data"
MIGRATE 192.168.1.100 6380 session:abc123 0 5000

返回 OK 表示迁移成功。迁移后:

  • 源端:session:abc123 不存在(EXISTS 返回 0)。
  • 目标端(DB 0):session:abc123 存在(EXISTS 返回 1)。

2. 源端 Key 不存在

迁移不存在的 Key:

redis 复制代码
MIGRATE 192.168.1.100 6380 no-such-key 0 5000

返回:

text 复制代码
NOKEY

NOKEY 表示源端没有找到指定的 Key,迁移未执行。

3. 迁移到不同的逻辑数据库

将 Key 迁移到目标实例的 DB 1

redis 复制代码
SET cache:item "data"
MIGRATE 192.168.1.100 6380 cache:item 1 5000

迁移后 Key 出现在目标实例的 DB 1 中。

4. 超时时间

timeout 单位为毫秒,是 I/O 操作(连接、传输)的最大等待时间。对于大 Key 的迁移,需要设置较大的超时时间:

redis 复制代码
MIGRATE 192.168.1.100 6380 big-list-key 0 30000

设置 30 秒超时。超时后迁移可能失败或返回错误。

5. COPY --- 保留源端 Key

默认情况下 MIGRATE 会从源端删除 Key。使用 COPY 选项后,源端 Key 不会被删除:

redis 复制代码
SET user:1001 "Alice"
MIGRATE 192.168.1.100 6380 user:1001 0 5000 COPY

迁移后:

  • 源端:user:1001 仍然存在。
  • 目标端:user:1001 也存在。

相当于复制 Key 到目标实例。

6. REPLACE --- 替换目标端同名 Key

默认情况下,如果目标端已存在同名 Key,MIGRATE 会返回错误。使用 REPLACE 选项可以强制覆盖:

redis 复制代码
MIGRATE 192.168.1.100 6380 user:1001 0 5000 REPLACE

迁移后目标端的同名 Key 会被新值覆盖。

7. COPY 和 REPLACE 组合使用

redis 复制代码
MIGRATE 192.168.1.100 6380 user:1001 0 5000 COPY REPLACE

保留源端 Key,同时覆盖目标端的同名 Key。

三、迁移多个 Key

从 Redis 3.0.6 开始,可以使用 KEYS 选项迁移多个 Key。此时 key 参数传空字符串 ""

1. 基本用法

redis 复制代码
SET user:1001 "Alice"
SET user:1002 "Bob"
SET user:1003 "Charlie"
MIGRATE 192.168.1.100 6380 "" 0 5000 KEYS user:1001 user:1002 user:1003

返回:

text 复制代码
OK

三个 Key 同时迁移到目标实例。如果在迁移过程中任何一个 Key 在源端被修改或删除,整个迁移操作会失败。

2. 部分 Key 不存在

多 Key 迁移时,部分 Key 不存在不会导致失败,不存在的 Key 会被跳过:

redis 复制代码
MIGRATE 192.168.1.100 6380 "" 0 5000 KEYS user:1001 not-exist user:1002

存在的 Key 正常迁移,not-exist 被跳过。如果所有 Key 都不存在,返回 NOKEY

3. 与通配符的区别

KEYS 选项接受的是明确的 Key 列表,不是 glob 模式。不能直接使用 user:* 作为模式:

redis 复制代码
# 错误:user:* 不是通配符模式,而是字面 Key 名称
MIGRATE 192.168.1.100 6380 "" 0 5000 KEYS user:*

# 正确:使用 SCAN 获取 Key 列表,然后逐批迁移

如需按模式迁移,先用 SCAN 获取匹配的 Key 列表,再批量传入 MIGRATE

redis 复制代码
SCAN 0 MATCH user:* COUNT 100
# 获取 Key 列表后:
MIGRATE 192.168.1.100 6380 "" 0 5000 KEYS user:1001 user:1002 user:1003

四、认证选项

1. AUTH --- 密码认证

目标实例设置了 requirepass 时,使用 AUTH 选项提供密码(Redis 4.0+):

redis 复制代码
MIGRATE 192.168.1.100 6380 user:1001 0 5000 AUTH "mysecret"

2. AUTH2 --- 用户名和密码认证

目标实例启用了 ACL(Redis 6.0+),使用 AUTH2 选项提供用户名和密码:

redis 复制代码
MIGRATE 192.168.1.100 6380 user:1001 0 5000 AUTH2 "migrate-user" "mysecret"

3. AUTH 与 AUTH2 不能同时使用

AUTHAUTH2 互斥,根据目标实例的认证方式选择其一。

五、MIGRATE 的原子性

1. 原子迁移保证

MIGRATE 是原子操作。在迁移过程中,Key 在源端和目标端的状态变化如下:

阶段 源端状态 目标端状态
迁移前 Key 存在 Key 不存在(或不使用 REPLACE 时报错)
序列化传输中 Key 仍存在 Key 不存在
目标端写入完成 Key 仍存在 Key 存在
源端删除完成 Key 已删除 Key 存在

在任意时刻,Key 要么存在于源端,要么存在于目标端(或极短的"两者都存在"过渡状态)。

2. 失败回滚

如果迁移过程中发生错误(如目标端不可达、超时等),MIGRATE 会:

  • 返回错误信息。
  • 源端 Key 不受影响(仍然存在)。
  • 目标端可能没有 Key(如果迁移未完成)。

3. 大 Key 的迁移

大 Key(如包含百万元素的 Hash、List、Set)的迁移可能需要较长时间。MIGRATE 的实现方式是:

  1. 在源端执行 DUMP 序列化 Key 的值。
  2. 将序列化数据传输到目标端。
  3. 在目标端执行 RESTORE 反序列化并恢复。
  4. 确认目标端恢复成功后,从源端删除 Key。

对于大 Key,确保设置足够的 timeout 值,避免因超时导致迁移失败。

六、MIGRATE 与相关命令的区别

1. MIGRATE 与 DUMP + RESTORE

MIGRATE 内部使用的就是 DUMP + RESTORE 的组合,但封装成了原子操作:

text 复制代码
# MIGRATE 内部等效流程(简化):
DUMP key          # 源端序列化
DEL key           # 源端删除
RESTORE key 0 <dump-data>  # 目标端恢复

手动分步执行 DUMP + RESTORE 不是原子的,中间可能出现数据丢失或竞态条件。优先使用 MIGRATE

2. MIGRATE 与 COPY

特性 MIGRATE COPY
操作范围 跨实例迁移 同实例内复制
源端 Key 默认删除(COPY 选项保留) 保留
目标端 另一个 Redis 实例 当前实例的不同 Key 名
原子性 原子操作 原子操作

COPY 用于同实例内复制 Key,MIGRATE 用于跨实例迁移 Key。

3. MIGRATE 与 CLUSTER SETSLOT

在 Redis Cluster 中,CLUSTER SETSLOT 用于槽位迁移。内部也会使用 MIGRATE 来迁移属于该槽位的 Key。MIGRATE 是底层迁移机制,CLUSTER SETSLOT 是集群层面的管理接口。

4. MIGRATE 与 MOVE

MOVE 将 Key 在同一实例的不同逻辑数据库之间移动,而 MIGRATE 跨实例迁移:

redis 复制代码
MOVE user:1001 1    # 移动到当前实例的 DB 1
MIGRATE 192.168.1.100 6380 user:1001 1 5000  # 迁移到远程实例的 DB 1
特性 MIGRATE MOVE
跨实例
原子性 原子 原子
目标端 另一个 Redis 实例 当前实例的不同 DB
大小限制 适合大 Key 适合单个 Key
适用场景 数据搬迁、迁移 逻辑库间转移

七、不同数据类型的迁移

MIGRATE 可以迁移任意数据类型的 Key,包括 String、Hash、List、Set、Sorted Set、Stream 等。迁移过程对数据类型透明------序列化和反序列化保留了完整的数据类型和内部编码。

redis 复制代码
HSET user:1001 name "Alice" age 30
MIGRATE 192.168.1.100 6380 user:1001 0 5000
redis 复制代码
RPUSH queue:jobs job-a job-b job-c
MIGRATE 192.168.1.100 6380 queue:jobs 0 5000
redis 复制代码
SADD tags redis python java
MIGRATE 192.168.1.100 6380 tags 0 5000
redis 复制代码
ZADD leaderboard 100 "player1" 200 "player2"
MIGRATE 192.168.1.100 6380 leaderboard 0 5000

迁移后目标端的 Key 保持相同的数据类型和内部结构。

八、过期时间的迁移

MIGRATE 会保留 Key 的过期时间。如果 Key 设置了 TTL(生存时间),迁移后目标端的 Key 仍然会在原定的过期时间点过期。

redis 复制代码
SET session:abc "token" EX 3600
MIGRATE 192.168.1.100 6380 session:abc 0 5000

迁移后在目标端执行:

redis 复制代码
TTL session:abc

返回一个正数,表示剩余生存时间。注意:迁移过程耗时会影响剩余 TTL。

注意:过期时间的绝对过期时刻是基于 Unix 时间戳的,如果源端和目标端的系统时间存在差异,可能导致 Key 在目标端的实际过期时间与预期不同。

九、事务、Pipeline 与并发场景

1. 在事务中使用

MIGRATE 是写命令,可以放入事务队列,但由于 MIGRATE 涉及网络 I/O,在事务中使用可能导致长时间阻塞:

redis 复制代码
MULTI
MIGRATE 192.168.1.100 6380 user:1001 0 5000
MIGRATE 192.168.1.100 6380 user:1002 0 5000
EXEC

不推荐在事务中大量使用 MIGRATE,因为每条 MIGRATE 都是网络操作,事务执行时间可能很长。

2. 多 Key 迁移的原子性

使用 KEYS 选项的多 Key 迁移是原子的------所有指定的 Key 作为一个批次迁移,要么全部成功,要么全部失败(不存在的 Key 被静默跳过)。

3. 并发安全

MIGRATE 本身是原子的,但迁移过程中其他客户端对源端 Key 的修改可能导致迁移失败。例如:

  • 源端 Key 在 DUMP 后、DEL 前被其他客户端修改。
  • 源端 Key 在迁移过程中被 EXPIRE 过期。

迁移过程中对源端 Key 的并发修改会导致 MIGRATE 返回错误,源端数据保持不变。

4. Pipeline 批量迁移

需要迁移大量 Key 时,可以使用多 Key 的 MIGRATE 分批执行,而不是逐个迁移:

redis 复制代码
MIGRATE 192.168.1.100 6380 "" 0 5000 KEYS key1 key2 key3 ... key100

每批次控制 Key 数量和总数据大小,避免单次迁移过大导致超时。

十、在常见客户端中的使用方式

1. redis-cli

bash 复制代码
# 迁移单个 Key
redis-cli MIGRATE 192.168.1.100 6380 user:1001 0 5000

# 带 COPY 选项
redis-cli MIGRATE 192.168.1.100 6380 user:1001 0 5000 COPY

# 带 REPLACE 选项
redis-cli MIGRATE 192.168.1.100 6380 user:1001 0 5000 REPLACE

# 迁移多个 Key
redis-cli MIGRATE 192.168.1.100 6380 "" 0 5000 KEYS user:1001 user:1002 user:1003

# 带认证
redis-cli MIGRATE 192.168.1.100 6380 user:1001 0 5000 AUTH "mysecret"

2. Python(redis-py)

python 复制代码
import redis

client = redis.Redis(host="localhost", port=6379, decode_responses=True)
client.set("user:1001", "Alice")

# 迁移单个 Key
result = client.migrate("192.168.1.100", 6380, "user:1001", 0, 5000)
print(result)  # b'OK'

# 迁移多个 Key
client.set("user:1002", "Bob")
client.set("user:1003", "Charlie")
result = client.migrate(
    "192.168.1.100", 6380, "", 0, 5000,
    keys=["user:1002", "user:1003"]
)
print(result)  # b'OK'

# 带 COPY 和 REPLACE
client.set("cache:item", "data")
result = client.migrate(
    "192.168.1.100", 6380, "cache:item", 0, 5000,
    copy=True, replace=True
)
print(result)

3. Node.js(node-redis)

javascript 复制代码
import { createClient } from "redis";

const client = createClient();
await client.connect();

await client.set("user:1001", "Alice");

// 迁移单个 Key
const result = await client.migrate(
  "192.168.1.100", 6380, "user:1001", 0, 5000
);
console.log(result); // OK

await client.quit();

4. Java(Jedis)

java 复制代码
import redis.clients.jedis.Jedis;

try (Jedis jedis = new Jedis("localhost", 6379)) {
    jedis.set("user:1001", "Alice");

    // 迁移单个 Key
    String result = jedis.migrate(
        "192.168.1.100", 6380, "user:1001", 0, 5000
    );
    System.out.println(result); // OK

    // 迁移多个 Key
    jedis.set("user:1002", "Bob");
    jedis.set("user:1003", "Charlie");
    result = jedis.migrate(
        "192.168.1.100", 6380, 0, 5000,
        "user:1002", "user:1003"
    );
    System.out.println(result); // OK
}

注意:不同客户端对 MIGRATE 的参数封装可能不同,使用前请查阅对应客户端文档。

十一、典型使用场景

1. 在线数据迁移

将数据从旧 Redis 实例迁移到新实例,实现平滑切换:

redis 复制代码
MIGRATE new-host 6379 user:1001 0 5000

逐个或分批迁移 Key,迁移过程中业务可以继续访问数据(已迁移的 Key 在新实例,未迁移的在旧实例)。

2. 集群扩容

新增 Redis 节点后,将部分 Key 迁移到新节点以实现负载均衡:

redis 复制代码
MIGRATE new-node-host 7001 "" 0 5000 KEYS cache:a cache:b cache:c

3. 数据备份到另一实例

使用 COPY 选项将数据复制到备份实例:

redis 复制代码
MIGRATE backup-host 6379 user:1001 0 5000 COPY

源端 Key 保留,目标端获得副本。

4. 跨环境数据搬迁

从开发环境迁移到测试环境,或从测试环境迁移到预发布环境:

redis 复制代码
MIGRATE test-host 6379 session:abc123 0 5000

5. Redis Cluster 槽位迁移

在 Redis Cluster 中,将一个槽位的数据从源节点迁移到目标节点。Redis 集群内部使用 MIGRATE 来完成 Key 的迁移:

redis 复制代码
MIGRATE target-node-host target-port key 0 5000

配合 CLUSTER SETSLOT 命令完成槽位迁移流程。

6. 分片数据平衡

根据 Key 的访问热度,将热点 Key 迁移到独立实例:

redis 复制代码
MIGRATE hotkey-host 6379 hot:counter 0 5000

十二、性能与使用建议

  1. 时间复杂度:O(N),其中 N 为迁移的 Key 数量。单个 Key 的迁移时间取决于 Key 的大小和网络传输速度。

  2. MIGRATE 是写命令(ACL 类别为 @keyspace@write@slow@dangerous),会修改源端和目标端的数据。

  3. 合理设置 timeout 值。迁移大 Key 时需要更长的超时时间,建议按 Key 大小动态调整:

    • 小 Key(String):1000-2000 毫秒。
    • 中等 Key(数百元素):3000-5000 毫秒。
    • 大 Key(数万元素):10000-30000 毫秒甚至更长。
  4. 迁移大量 Key 时,使用多 Key 的 KEYS 选项分批迁移,而不是逐个迁移,减少网络往返。每批次建议不超过数百个 Key 或数 MB 数据。

  5. 迁移前先评估 Key 大小,避免迁移超大 Key 导致超时:

    redis 复制代码
    MEMORY USAGE big-key
  6. 如果目标端需要认证,使用 AUTHAUTH2 选项提供凭据。

  7. 迁移过程中源端和目标端的系统时间差异会影响过期 Key 的行为,确保两端时间同步(如使用 NTP)。

  8. 生产环境中避免在高峰期执行大量 MIGRATE 操作,因为迁移会占用网络带宽和 CPU 资源。

  9. 如果迁移失败,检查目标实例是否可达、端口是否开放、密码是否正确、目标 DB 是否存在。

  10. 集群模式下,MIGRATE 可以直接使用,不受槽位限制(但集群层面的槽位迁移应使用 CLUSTER SETSLOT 流程)。

十三、常见问题排查

问题 1:MIGRATE 返回 IOERR

IOERR 表示在迁移过程中发生了 I/O 错误。可能的原因:

  1. 目标实例不可达(网络不通、端口未开放)。
  2. 目标实例内存已满,无法写入。
  3. 超时时间太短,大 Key 传输未完成。
bash 复制代码
# 测试目标实例连通性
redis-cli -h 192.168.1.100 -p 6380 PING

解决方案:检查网络连通性、增大 timeout 值、确认目标实例内存充足。

问题 2:MIGRATE 返回 BUSYKEY

BUSYKEY 表示目标端已存在同名 Key。使用 REPLACE 选项强制覆盖:

redis 复制代码
MIGRATE 192.168.1.100 6380 user:1001 0 5000 REPLACE

问题 3:MIGRATE 返回 NOKEY

NOKEY 表示源端没有找到指定的 Key。可能的原因:

  1. Key 名称拼写错误或包含不可见字符。
  2. Key 在当前逻辑数据库中不存在(SELECT 切换的库影响可见范围)。
  3. Key 已过期或被其他客户端删除。
redis 复制代码
EXISTS user:1001
SELECT 0

问题 4:MIGRATE 返回 ERR syntax error

语法错误。常见原因:

  1. KEYS 选项使用时 key 参数未传空字符串 ""
  2. AUTHAUTH2 同时使用。
  3. 参数顺序不正确。
redis 复制代码
# 正确的多 Key 迁移语法
MIGRATE host port "" db timeout KEYS key1 key2

# 正确的认证语法
MIGRATE host port key db timeout AUTH "password"

问题 5:大 Key 迁移超时

大 Key 的 DUMP + 传输 + RESTORE 过程耗时较长。解决方案:

  1. 增大 timeout 值(如 30000 毫秒或更长)。

  2. 迁移前检查 Key 大小,预估传输时间:

    redis 复制代码
    MEMORY USAGE big-key
  3. 对于超大 Key,考虑先在源端拆分(如将大 Hash 分片为多个小 Hash),再分别迁移。

  4. 如果超时后源端数据仍在,可以重试迁移。

问题 6:迁移后过期时间异常

源端和目标端系统时间不同步会导致过期 Key 的 TTL 行为异常。确保两端使用 NTP 同步时间。迁移后用 TTL 验证:

redis 复制代码
TTL migrated-key

十四、完整练习

下面的示例演示从准备数据、单个 Key 迁移、多 Key 迁移、COPY 和 REPLACE 选项使用,到验证迁移结果的完整流程。需要两个 Redis 实例(源端 localhost:6379,目标端 localhost:6380):

redis 复制代码
# 清理源端
FLUSHDB

# 准备数据
SET user:1001 "Alice"
SET user:1002 "Bob"
SET user:1003 "Charlie"
HSET product:2001 name "Phone" price 999
LPUSH queue:jobs job-a job-b
SET session:token "token-data" EX 3600
SET "existing:target" "old-value"

# 1. 迁移单个 Key
MIGRATE 127.0.0.1 6380 user:1001 0 5000
EXISTS user:1001

# 2. 迁移不存在的 Key
MIGRATE 127.0.0.1 6380 no-such-key 0 5000

# 3. 使用 COPY 保留源端
MIGRATE 127.0.0.1 6380 user:1002 0 5000 COPY
EXISTS user:1002

# 4. 多 Key 迁移
MIGRATE 127.0.0.1 6380 "" 0 5000 KEYS user:1003 product:2001

# 5. 迁移带过期的 Key
MIGRATE 127.0.0.1 6380 session:token 0 5000

# 在目标端验证(连接到 6380 端口)
# SELECT 0
# GET user:1001
# GET user:1002
# GET user:1003
# HGETALL product:2001
# LRANGE queue:jobs 0 -1  (注意:queue:jobs 未迁移)
# TTL session:token
# GET existing:target  (注意:未迁移,仍为旧值)

# 6. 使用 REPLACE 覆盖目标端同名 Key
# 先在目标端创建同名 Key(在 6380 端口执行)
# SET existing:target "target-value"
# 回到源端迁移并覆盖
MIGRATE 127.0.0.1 6380 existing:target 0 5000 REPLACE

# 7. 迁移不同数据类型
MIGRATE 127.0.0.1 6380 queue:jobs 0 5000
EXISTS queue:jobs

# 验证所有迁移结果
DBSIZE
KEYS *

预期结果:

  • MIGRATE ... user:1001 ... 返回 OK,迁移后 EXISTS user:1001 返回 0
  • MIGRATE ... no-such-key ... 返回 NOKEY
  • MIGRATE ... user:1002 ... COPY 返回 OK,迁移后 EXISTS user:1002 返回 1(COPY 保留源端)。
  • MIGRATE ... KEYS user:1003 product:2001 返回 OK,两个 Key 被迁移。
  • MIGRATE ... session:token ... 返回 OK,迁移后目标端 TTL session:token 返回正数。
  • MIGRATE ... existing:target ... REPLACE 返回 OK,目标端旧值被覆盖。
  • MIGRATE ... queue:jobs ... 返回 OK,List 类型成功迁移。
  • 最终源端剩余 Key 为使用 COPYuser:1002DBSIZE 反映剩余数量。

十五、命令速查表

需求 命令
迁移单个 Key 到另一实例 MIGRATE host port key db timeout
迁移并保留源端 Key MIGRATE host port key db timeout COPY
迁移并覆盖目标端同名 Key MIGRATE host port key db timeout REPLACE
迁移多个 Key MIGRATE host port "" db timeout KEYS key1 key2 ...
带密码认证迁移 MIGRATE host port key db timeout AUTH "password"
带 ACL 认证迁移 MIGRATE host port key db timeout AUTH2 "user" "pass"
同实例内复制 Key COPY source destination
同实例内移动 Key 到另一 DB MOVE key db
序列化 Key 的值 DUMP key
从序列化数据恢复 Key RESTORE key ttl serialized-value
异步删除 Key UNLINK key [key ...]
集群槽位迁移 CLUSTER SETSLOT slot NODE node-id
检查 Key 内存占用 MEMORY USAGE key
测试实例连通性 PING

总结

MIGRATE 的核心作用是将 Key 从当前 Redis 实例原子地迁移到另一个 Redis 实例:

redis 复制代码
MIGRATE host port key|"" destination-db timeout [COPY] [REPLACE] [AUTH password] [KEYS key ...]

使用时重点注意六点:

  • MIGRATE 是原子操作,迁移过程中 Key 不会同时存在于两个实例(COPY 选项除外)。
  • 默认迁移后源端 Key 被删除,使用 COPY 选项可保留源端 Key。
  • 目标端存在同名 Key 时默认返回 BUSYKEY 错误,使用 REPLACE 选项强制覆盖。
  • 多 Key 迁移使用空字符串 "" 作为 key 参数,配合 KEYS 选项传入 Key 列表。
  • 合理设置 timeout 值,迁移大 Key 时需要更长的超时时间。
  • 迁移会保留 Key 的数据类型、内部编码和过期时间,但源端和目标端的系统时间差异可能影响过期 Key 的行为。
相关推荐
A.说学逗唱的Coke1 小时前
【人工智能专题】Redis 杀进 AI 数据层:向量搜索、语义缓存与 Agent 记忆工程从入门到踩坑
人工智能·redis·缓存
XiYang-DING2 小时前
地图城市缓存优化:ApplicationReadyEvent + Caffeine + Redis + Redisson 分布式锁
redis·分布式·缓存
爱和冰阔落5 小时前
【Linux】多线程打印为什么会乱?pthread 创建、等待、退出、取消与分离全实战
linux·运维·c++·redis
一只小bit7 小时前
Redis哨兵机制、主从复制与集群搭建与维护
数据库·redis·bootstrap
智购科技无人售货机厂家14 小时前
2026自动售货机制冷系统维护指南:从散热器清洁到压缩机换油的工程实践~YH
运维·redis·物联网·缓存·架构
2601_9621741718 小时前
Redis 简介
数据库·redis·wpf
2601_9621284118 小时前
SpringBoot篇(缓存层)
java·spring boot·缓存
mmsy102420 小时前
缓存知识点总结
java·spring·缓存
garmin Chen21 小时前
redis面试题
java·数据库·redis·缓存