1. 直接用迁移命令MIGRATE做数据迁移
将src Redis上的三个key(x,y,z)的全部内容,迁移到dst Redis(10.20.30.40)
(1)登录src Redis的cli
(2)执行命令
MIGRATE 10.20.30.40 6379 "" 0 5000 COPY KEYS x y z
命令说明:
- 10.20.30.40:目的Redis服务器地址
- 0 5000:timeout时间范围(毫秒)
- COPY:可以去掉,若去掉,则迁移key后,就会在本地将key删除
- x y z:要迁移的三个key
注意timeout并不是说数据迁移必须在这个时间范围内(5s)完成,而是说迁移过程如果有中断,中断不能超过5s。
MIGRATE实例
(1)启动dst Redis
root@ubuntu:/home//tmp/redis-3.2.9# src/redis-server --protect-mode no
(2)启动src Redis
root@ubuntu:/home//tmp/redis-3.2.9# src/redis-server
(3)在src Redis中,添加几个key
127.0.0.1:6379> set x1 123
OK
127.0.0.1:6379> sadd x2 1 2 3
(integer) 3
127.0.0.1:6379> hmset x3 key1 value1 key2 value2
(4)在src Redis上执行如下命令,迁移到dst Redis
127.0.0.1:6379> MIGRATE 10.20.30.40 6379 "" 0 5000 COPY KEYS x1 x2 x3
OK
2. 先做backup,再restore
通过Redis的MIGRATE命令说明可以看到,MIGRATE的实现,是在Redis数据源上,做DUMP+DEL,然后到目标Redis,做RESTORE。
我们也可以参考这种思路,将src redis上的key先DUMP到本地磁盘,再将其移动到dst redis,然后用RESTORE重建。
backup/restore实例
(1)启动dst Redis
root@ubuntu:/home//tmp/redis-3.2.9# src/redis-server --protect-mode no
(2)启动src Redis
root@ubuntu:/home//tmp/redis-3.2.9# src/redis-server
(3)在src Redis,对某个key做backup。这里将key为user:1000
的HASH结构backup为文件user_1000
root@ubuntu:/home/tmp# redis-3.2.9/src/redis-cli --raw dump user:1000 | head -c-1 > user_1000
注意,这里head -c-1
,是将DUMP指令的输出的数据,去掉最后一个字节,然后保存为文件user_1000
(4)将文件user_1000
拷贝到dst Redis,再导入,并将key设置为user:1000:new
root@ubuntu:/home/tmp# cat user_1000 | redis-3.2.9/src/redis-cli -x restore user:1000:new 0
最后一个参数0,是到期时间。如果设置为0,则表示不为该操作(restore)设置到期时间。
总结
直接使用MIGRATE做数据迁移,较为简单,但低版本的Redis,MIGRATE不支持COPY,就是说MIGRATE后会在src redis上删除数据。用DUMP/RESTORE做数据迁移,虽然耗时一些,但能做好backup,src redis上数据不会被删除,比较安全。