迁移键的功能是redis的重要功能之一
我们要从一个redis将数据迁移到另一个redis时(如,生产环境迁移部分数据到测试环境)
move
move命令可以实现redis内部数据迁移
redis默认有0-15共16个库
也就是从当前库,迁移到另一个库
move key db
一般生产环境中不会使用多个库,所以这里不过得介绍
dump + restore
dump 加上 restore 命令可以实现不同redis实例之间进行数据迁移功能
过程
在源redis上执行dump命令将键值序列化,格式采用RDB的方式
在目标redis上使用restore将上面序列化的值复原,其中ttl参数代表过期时间,为0表示没有过期时间
#格式
dump key
restore key ttl value
#小编没有做多实例,将命令给出
#源redis中
127.0.0.1:6379> set k1 name
OK
127.0.0.1:6379> dump k1
"\x00\x04name\t\x00HF\x15\xb6\xc1\x81>\x85"
#目标redis
restore k1 0 "\x00\x04name\t\x00HF\x15\xb6\xc1\x81>\x85"
OK
#python代码实现
conn1 = redis.StrictRedis(host='IP地址' ,port='6379' ,password='123123' ,db=0)
conn2 = redis.StrictRedis(host='IP地址' ,port='6380' ,password='123123' ,db=0)
conn2.restore('k1' ,0 ,conn1.dump('k1'))
migrate
migrate其实是dump、restore、del命令的组合
migrate具有原子性,3X以后支持多个key的迁移
migrate的实现过程
在源redis上执行migrate命令,数据传输执行在源redis和目标redis上完成
目标redis完成后向源redis发送ok
源收到后会根据migrate对应的选项来决定是否删除原redis上对应的键
migrate host port key db timeout [copy] [replace] [keys key1 key2...]
host:目标redis的IP
port:目标redis的端口
db:目标redis的库号
timeout:迁移超时时间,毫秒
#源redis上有键,目标redis上没键
migrate 127.0.0.1 6379 k1 0 1000
#源redis上有键,目标redis上有键,要加上replace,但是目标redis上以前的内容会丢失
migrate 127.0.0.1 6379 k1 0 1000 replace
#多个键迁移
migrate 127.0.0.1 6379 "" 0 1000 keys k1 k2 k3