redis键数据迁移

本文介绍了Redis中三种数据迁移方式。move命令用于在Redis内部迁移数据;dump+restore可在不同Redis实例间迁移,分两步完成,但非原子性;migrate命令同样用于实例间迁移,将dump、restore、del组合,具有原子性,从3.0.6版本起支持多键迁移,还对其参数进行了说明。

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

1。 move
move key db
move命令用于在Redis内部进行数据迁移,,move key db就是把指定的键从源数据库移动到目标数据库中
2。dump+restore
dump key
restore key ttl value
dump+restore可以实现在不同的Redis实例之间进行数据迁移的功能,整个迁移的过程分为两步:
1)在源Redis上,dump命令会将键值序列化,格式采用的是RDB格式。
2)在目标Redis上,restore命令将上面序列化的值进行复原,其中ttl参 数代表过期时间,如果ttl=0代表没有过期时间。
在这里插入图片描述
有关dump+restore有两点需要注意:第一,整个迁移过程并非原子性的,而是通过客户端分步完成的。第二,迁移过程是开启了两个客户端连 接,所以dump的结果不是在源Redis和目标Redis之间进行传输,下面用一个
例子演示完整过程。

     1)在源redis上执行dump
       redis-source> set hello world 
            OK 
       redis-source> dump hello
            "\x00\x05world\x06\x00\x8f<T\x04%\xfcNQ"
     2)在目标redis上执行restore:
        redis-target> get hello 
                     (nil) 
        redis-target> restore hello 0 "\x00\x05world\x06\x00\x8f<T\x04%\xfcNQ" 
                     OK 
        redis-target> get hello 
                      "world"

3。migrate
migrate host port key|"" destination-db timeout [copy] [replace] [keys key [key
migrate命令也是用于在Redis实例间进行数据迁移的,实际上migrate命 令就是将dump、restore、del三个命令进行组合,从而简化了操作流程。 migrate命令具有原子性,而且从Redis3.0.6版本以后已经支持迁移多个键的 功能,有效地提高了迁移效率
实现过程和dump+restore基本类似,但是有3点 不太相同:
第一,整个过程是原子执行的,不需要在多个Redis实例上开启 客户端的,只需要在源Redis上执行migrate命令即可。
第二,migrate命令的 数据传输直接在源Redis和目标Redis上完成的。
第三,目标Redis完成restore 后会发送OK给源Redis,源Redis接收后会根据migrate对应的选项来决定是否在源Redis上删除对应的键。
在这里插入图片描述
下面对migrate的参数进行逐个说明:
·host:目标Redis的IP地址。
·port:目标Redis的端口。
·key|"":在Redis3.0.6版本之前,migrate只支持迁移一个键,所以此处是 要迁移的键,但Redis3.0.6版本之后支持迁移多个键,如果当前需要迁移多 个键,此处为空字符串""。
·destination-db:目标Redis的数据库索引,例如要迁移到0号数据库,这里就写0。
·timeout:迁移的超时时间(单位为毫秒)。
·[copy]:如果添加此选项,迁移后并不删除源键。
·[replace]:如果添加此选项,migrate不管目标Redis是否存在该键都会正常迁移进行数据覆盖。
·[keys key[key…]]:迁移多个键,例如要迁移key1、key2、key3,此处填 写“keys key1 key2 key3”。

     下面用示例演示migrate命令,为了方便演示源Redis使用6379端口,目 标Redis使用6380端口,现要将源Redis的键hello迁移到目标Redis中,会分为如下几种情况:
      情况1:  源redis有键hello,目标redis没有
      127.0.0.1:6379> migrate 127.0.0.1 6380 hello 0 1000 
            OK
      情况2:源Redis和目标Redis都有键hello:
      127.0.0.1:6379> get hello 
              "world" 
       127.0.0.1:6380> get hello 
               "redis"
   如果migrate命令没有加replace选项会收到错误提示,如果加了replace会 返回OK表明迁移成功:
      127.0.0.1:6379> migrate 127.0.0.1 6379 hello 0 1000 
            (error) ERR Target instance replied with error: BUSYKEY Target key name already exists. 
      127.0.0.1:6379> migrate 127.0.0.1 6379 hello 0 1000 replace
              OK
     情况3:源Redis没有键hello。如下所示,此种情况会收到nokey的提示:
     127.0.0.1:6379> migrate 127.0.0.1 6380 hello 0 1000 
             NOKEY

     演示 :
      ·源Redis批量添加多个键:
      127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3 
               OK
      ·源Redis执行如下命令完成多个键的迁移:
       127.0.0.1:6379> migrate 127.0.0.1 6380 "" 0 5000 keys key1 key2 key3 
                OK

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值