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