redis-port 支持前缀迁移
一、介绍
一、介绍
redis-port是一款redis数据迁移工具,用来将数据从一个redis迁移到另一个redis实例/redis集群中 ,以下是官方地址:
https://github.com/CodisLabs/redis-port
使用也是非常的简单:
上述命令将127.0.0.1:6379这个redis实例的数据迁移到 127.0.0.1:6380 中。
最近有这么一个场景:只迁移指定前缀的key,因为一个redis集群有好几个应用在用,如果全部都迁,时间太长,占的内存也比较大。
二、改造过程
我们先整理下redis-port的工作流程:
1、伪装一个从,向主redis 发起同步请求;
2、主redis将当前数据以rdb发送给redis-port;
3、redis-port解析rdb文件,然后1条1条的向目标redis写入数据;
4、接收主redis发送过来的增量命令,发往目标redis。
所以如果要改造的话,需要修改3和4两处,当然了还得增加参数解析的代码,具体步骤如下:
1、先修改cmd/flags.go 增加前缀的参数:
其中SourcePrefixs为新加的字段,类型为一个字符串数组,因为前缀可能有多个。
2、修改cmd/flags.go解析参数函数parseFlagsFromArgs
3、修改cmd/libs.go,增加判断key是否包含指定前缀的函数
4、修改cmd/libs.go处理rdb文件的函数genRestoreCommands增加相应逻辑
doRestoreDBEntry增加sourcePrefix参数
5、修改cmd/libs.go回放aof文件函数doRestoreAoflog
6、在入口cmd/sync.go增加参数声明
开两个redis实例,实例A为6379端口,实例B为6380端口,实例A数据如下:
执行redis-sync:
可以看到只有order前缀的数据才迁移过来了。
版权声明: 本文为 InfoQ 作者【心平气和】的原创文章。
原文链接:【http://xie.infoq.cn/article/dbf68efe579cf69e2b3af051e】。文章转载请联系作者。
评论