投稿    登录
欢迎光临 www.huangdc.com

redis数据迁移(twemproxy)

Linux huangdc 6929℃ 0评论

redis 数据迁移至 twemproxy redis 集群

在之前的文章讲到实现redis集群高可用,可以查看链接:twemproxy + redis + sentinel 实现redis集群高可用

但是要从旧的redis中将数据迁移到redis集群确实还是要想想办法,因为集群的前端是 twemproxy .
反正想来想去,实在没有办法了,了解到了redis的这三个命令 dump 、 pttl 、restore
那就用最原始的方法,将redis的每个key的数据从旧redis直接dump出来,然后通过restore命令导入到 twemproxy redis 集群中。

先来了解一下redis的这三个命令 dump 、 pttl 、restore

Redis DUMP 命令

Redis DUMP 命令用于序列化给定 key ,并返回被序列化的值

命令基本语法:
redis 127.0.0.1:4500 > DUMP KEY_NAME
如果 key 不存在,那么返回 nil 。 否则,返回序列化之后的值

 

Redis PTTL 命令

Redis PTTL 命令以毫秒为单位返回 key 的剩余过期时间。
命令基本语法如下:
redis 127.0.0.1:6379> PTTL KEY_NAME
当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。
注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。

 

Redis RESTORE 命令

反序列化给定的序列化值,并将它和给定的 key 关联

命令基本语法:
redis 127.0.0.1:6379> RESTORE KEY_NAME ttl serialized-value [REPLACE]

参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间。(ttl 的值需要通过 PTTL 命令来回去)
RESTORE 在执行反序列化之前会先对序列化值的 RDB 版本和数据校验和进行检查,如果 RDB 版本不相同或者数据不完整的话,那么 RESTORE 会拒绝进行反序列化,并返回一个错误。
如果键 key 已经存在, 并且给定了 REPLACE 选项, 那么使用反序列化得出的值来代替键 key 原有的值;
相反地, 如果键 key 已经存在, 但是没有给定 REPLACE 选项, 那么命令返回一个错误。

 

好了,大家知道了,就是将 dump 出来的序列化的值重新RESTORE 到新的key去即可 ,即完成了数据的导入导出

python多线程脚本实现迁移

最后,贡献一个多线程小脚本来实现:(python脚本,大家提前需要安装redis模块,pip install redis 即可安装)

实例(保存为 mig.py 脚本):

redis 源:  192.168.1.101:4672
twemproxy redis 集群:  192.168.1.6:4503
redis源数据大概有150M ,可以看到数据迁移的用时是108秒,稍微有点慢。

大家可以自己试试,或者有其他更好的数据迁移方法,希望分享一下

 

转载请注明:Huangdc » redis数据迁移(twemproxy)

喜欢 (5)or分享 (0)
发表我的评论
取消评论

表情
(1)个小伙伴在吐槽
  1. src_keys_all 在哪呢?
    匿名2017-05-24 17:06 回复