在工作中可能会遇到单点Redis向Redis集群迁徙数据的问题,但又不能老麻烦运维来做。为了不便研发本人迁徙数据,我这里写了一个简略的Redis迁徙工具,心愿对有须要的人有用。
本工具反对:
- 单点Redis到单点Redis迁徙
- 单点Redis到Redis集群迁徙
- Redis集群到Redis集群迁徙
- Redis集群到单点Redis迁徙
该工具曾经编译成了多平台命令,间接从Github下载二进制文件执行就好了。
我的项目地址: https://github.com/icowan/redis-tool
把代码拉下来之后间接执行命令 make 就能够编译多个平台可执行文件,须要依赖golang编译器。
- Windows amd64: redis-tool-windows-amd64.exe
- MacOS amd64: redis-tool-darwin-amd64
- Linux amd64: redis-tool-linux-amd64
- Linux arm64: redis-tool-linux-arm64
查看应用办法:
$ chmod a+x redis-tool-linux-amd64
$ ./redis-tool-linux-amd64 -h
反对的数据类型
- string 字符串
- hash 散列列表
- list 列表
- sorted-set 有序汇合
如何应用
下载好命令并受权之后执行 ./redis-tool-linux-amd64 -h 能够查看该工具所反对的所有性能:
$ ./redis-tool-darwin-amd64 migrate -h
数据迁徙命令
Usage:
redis-tool migrate [command]
Examples:
反对命令:
[hash, set, sorted-set, list]
Available Commands:
all 迁徙所有
hash 哈希列表迁徙
list 列表迁徙
set redis set 迁徙
sorted-set 有序汇合迁徙
Flags:
-h, --help help for migrate
--source-auth string 源明码
--source-database int 源database
--source-hosts string 源redis地址, 多个ip用','隔开 (default "127.0.0.1:6379")
--source-prefix string 源redis前缀
--source-redis-cluster 源redis是否是集群
--target-auth string 指标明码
--target-database int 指标database
--target-hosts string 指标redis地址, 多个ip用','隔开 (default "127.0.0.1:6379")
--target-prefix string 指标redis前缀
--target-redis-cluster 指标redis是否是集群
Use "redis-tool migrate [command] --help" for more information about a command.
参数阐明:
- –source-auth: 源redis明码,如果有的话就填
- –source-database: 源database,默认是 0
- –source-hosts: 源redis地址, 集群的多个ip用’,’隔开 (default “127.0.0.1:6379”)
- –source-prefix: 源redis前缀, 可不填
- –source-redis-cluster: 源redis是否是集群, 默认 false
- –target-auth: 迁徙指标redis明码,如果有的话就填
- –target-database: 迁徙指标database,默认是 0
- –target-hosts: 迁徙指标redis地址, 集群的多个ip用’,’隔开 (default “127.0.0.1:6379”)
- –target-prefix: 迁徙指标redis前缀, 可不填
- –target-redis-cluster: 迁徙指标redis是否是集群, 默认 false
迁徙单个key的数据
上面就举两个例子吧,其余的都差不太多。
Hash类型
能够通过命令 redis-tool migrate hash -h 查看应用阐明
$ redis-tool migrate hash helloworld \
--source-hosts 127.0.0.1:6379 \
--target-redis-cluster true \
--target-hosts 127.0.0.1:6379,127.0.0.1:7379 \
--target-auth 123456
有序汇合
能够通过命令 redis-tool migrate sorted-set -h 查看应用阐明
有序汇合的数据量可能会比拟大,所以这里按 50000 为单位进行了切割。我这里测试过迁徙近17000000万条的数据,用时40多分钟。
$ redis-tool migrate hash helloworld \
--source-hosts 127.0.0.1:6379 \
--target-redis-cluster true \
--target-hosts 127.0.0.1:6379,127.0.0.1:7379 \
--target-auth 123456
迁徙所有key的数据反对通配符过滤
能够通过命令 redis-tool migrate all -h 查看应用阐明
$ redis-tool migrate all "ipdetect:*" \
--source-hosts 127.0.0.1:6379 \
--target-redis-cluster true \
--target-hosts 127.0.0.1:6379,127.0.0.1:7379 \
--target-auth 123456
这个命令会编译匹配到的所有类型的key,再依据key的类型进行逐渐迁徙。
尾巴
应用golang写的一个比较简单的工具, 次要用于在Redis没有长久化或多套Redis向一套Redis迁徙的状况下应用。
心愿对大家有用,谢谢!
作者:宜信技术学院 王聪
发表回复