Redis migrate 數據遷移工具

在工作中可能會遇到單點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遷移的情況下使用。

希望對大家有用,謝謝!

作者:宜信技術學院 王聰

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章