通过migrate命令实现两个redis实例之间的数据迁移

本文详细介绍了Redis的migrate命令,包括其原子性特点,用于在不同服务器间迁移数据的过程,涉及的关键参数如host,port,key,destination-db,timeout,COPY和REPLACE。通过实例演示了如何迁移单个和多个键,以及不同参数选项的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文适用于将源服务器的redis实例的key的数据迁移到其他服务器的redis实例

一、migrate简介:

migrate用于在Redis实例间进行数据迁移,实际上migrate命令是将dump、restore、del三个命令进行组合,从而简化了操作流程。migrate命令具有原子性,从Redis 3.0.6版本后已经支持迁移多个键的功能。migrate命令的数据传输直接在源Redis和目标Redis上完成,目标Redis完成restore后会发送OK给源Redis。

二、migrate命令参数:

MIGRATE host port key| destination-db timeout [COPY] [REPLACE] [AUTH password] [AUTH2 username password] [KEYS key]
重要参数解释:

host:目标Redis的IP地址
port:目标Redis的端口
key|“”:Redis 3.0.6 后如果需要迁移多个键,此处为空字符串""
destination-db:目标Redis的数据库索引
timeout:迁移的超时时间(单位为毫秒)
copy:如果添加此选项后,迁移后不删除源键。
replace:如果添加此选项migrate不管目标Redis是否存在该键都会正常迁移进行数据覆盖,如果不提供此参数且目标redis存在该键,则抛出异常”(error) ERR Target instance replied with error: BUSYKEY Target key name already exists.“
keys:如果要迁移多个键 keys key1 key2 key3 key4

示例:

将name1 复制到目标redis的0库,超时时间为1s,不删除源redis的key,覆盖目标redis中相同的key

MIGRATE 127.0.0.1 6379 name1 0 1000 copy replace

如果移动多个key:

MIGRATE 127.0.0.1 6379 "" 2 5000 copy replace keys key1 key2 key3 key4

三、实践测试:

1、我在本地模拟了两个redis实例。ip都为127.0.0.1,端口一个是默认的6379,一个是63791
并且分别set了不同的key

127.0.0.1:63791> keys *
1) "age"
2) "like"
3) "colour"
127.0.0.1:6379> keys *
1) "student"

2、在源redis实例63791上执行迁移命令
将age 复制到目标redis的0库,超时时间为1s,不删除源redis的key,覆盖目标redis中相同的key

127.0.0.1:63791> keys *
1) "age"
2) "like"
3) "colour"
127.0.0.1:63791>
127.0.0.1:63791>
127.0.0.1:63791>
127.0.0.1:63791>
127.0.0.1:63791> MIGRATE 127.0.0.1 6379 age 0 1000 copy replace
OK

查看6379的redis实例,可以看到age迁移成功

127.0.0.1:6379> keys *
1) "age"
2) "student"
127.0.0.1:6379> get age
"22"

再试一下replace这个参数的作用,增加这个参数代表覆盖目标key,验证一下,现在6379的实例的age是22
我们在源实例里将age改一下,然后再迁移

127.0.0.1:63791> set age 99
OK
127.0.0.1:63791> get age
"99"
127.0.0.1:63791> MIGRATE 127.0.0.1 6379 age 0 1000 copy replace
OK

查看目标实例
可以看到age已经被覆盖了

127.0.0.1:6379> keys *
1) "age"
2) "student"
127.0.0.1:6379>
127.0.0.1:6379> get age
"99"

如果不想覆盖目标实例的key,可以把replace参数去掉,在源实例执行一下命令
可以看到抛出了异常,key已经存在

127.0.0.1:63791> MIGRATE 127.0.0.1 6379 age 0 1000 copy
(error) ERR Target instance replied with error: BUSYKEY Target key name already exists.

迁移多个key的命令:

127.0.0.1:63791> MIGRATE 127.0.0.1 6379 "" 0 1000 copy replace keys age like colour
OK

查看目标实例
可以看到数据都被迁移了过来

127.0.0.1:6379> keys *
1) "like"
2) "age"
3) "student"
4) "colour"

剩下的其他参数大家可以自己验证一下~

文章持续更新,可以关注下方公众号或者微信搜一搜「 最后一支迷迭香 」第一时间阅读,获取更完整的链路资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最后一支迷迭香

您的赞赏将给作者加杯☕️

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值