Redis migrate 數據遷移工具

2020-10-30 宜信技術學院

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

希望對大家有用,謝謝!

作者:宜信技術學院 王聰

相關焦點

  • Redis如何從ElastiCache中遷移增量或變化的key導入到新的環境中
    最近在做從Redis的數據遷移,從AWS的ElastiCache中將數據遷移到ec2部署的Redis集群環境中.這裡先簡述一下大概的遷移過程使用ElastiCache中的備份功能,產生RDB快照文件,9G的數據快照時間大約49分鐘.
  • Redis百萬級別數據遷移
    ;當然遷移也是個有挑戰的事情;要做到不能出任何差錯,各個技術團隊配合(運維負責進行環境搭建,數據遷移;開發負責各個工程的檢查;測試負責回歸測試.....) 今天與大家分享的是我們數據遷移其中的一部分Redis數據遷移的一種備用方案;【遷移方法】 一、數據量: 數據條數:550萬+,數據大小:450MB 二、遷移:
  • 「程式設計師同事的分享」redis cluster管理工具redis-trib.rb詳解
    概述redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源碼src目錄下,是基於redis提供的集群命令封裝成簡單、便捷、實用的操作工具。redis-trib.rb是redis作者用ruby完成的。
  • redis cluster 集群管理工具
    :將新節點加入集群 del-node:從集群中刪除節點 set-timeout:設置集群節點間心跳連接的超時時間 call:在集群全部節點上執行命令 import:將外部redis數據導入集群 常用例子1、create創建集群:create命令可選replicas參數,replicas
  • redis分配槽命令專題及常見問題 - CSDN
    ,此時「緩存節點 1」正向「緩存節點 2」遷移數據,如果沒有命中對應的 Slot,它會返回客戶端一個 ASK 重定向請求並且告訴「緩存節點 2」的地址。詳細圖注意:redis-cluster 數據遷移是同步的,在目標節點執行restore 指令到源節點刪除key 之間,源節點主線程處於阻塞狀態,直達key 被成功刪除。
  • redis-port支持前綴遷移
    是一款redis數據遷移工具,用來將數據從一個redis遷移到另一個redis實例/redis集群中 ,以下是官方地址:https://github.com/CodisLabs/redis-port使用也是非常的簡單:/redis-port sync -f 127.0.0.1:6379 -t 127.0.0.1:6380 -n 8上述命令將127.0.0.1:6379這個redis實例的數據遷移到 127.0.0.1:6380 中。
  • 環信實操乾貨:pika新特性支持codis slot遷移
    後來了解到pika數據存儲在磁碟裡面,而且兼容redis協議及命令,可以掛載在codis proxy後面做server,這樣既保留codis proxy的高性能,又能解決TB級數據量的存儲成本問題。但pika還不支持codis的slot遷移,當壓力上漲時,擴容是個問題。通過研究codis及pika的實現,在pika上開發實現了codis的slot遷移。
  • Django 學習筆記系列 之 資料庫遷移(migrate)
    newUser,這也是我們在models.py 創建的一個 同名 python 數據模型類。可以看出,此時,這裡是空白,也就意味著裡面並沒有數據的具體信息,我們再鍵入 python manage.py migrate 命令,看一下資料庫是否發生變化?
  • 你不知道的redis:第三方jar無封裝命令我們該怎麼執行?
    推薦學習redis的基本操作指令就不多說了,今天對redis的進階操作給大家介紹一下,以及對於jedis和redisTemplate等工具包沒有封裝的命令我們該如何使用鍵遷移大家可能用的不是很多,因為一般都是使用redis主從同步。
  • Redis Cluster 的數據分片機制
    上一篇《分布式數據緩存中的一致性哈希算法》文章中講述了一致性哈希算法的基本原理和實現,今天就以 Redis Cluster 為例,詳細講解一下分布式數據緩存中的數據分片,上線下線時數據遷移以及請求重定向等操作。
  • laravel 的 redis 隊列
    配置文件.evn文件修改部分QUEUE_CONNECTION=redisconfig/database.php 配置文件中配置一個 redis 資料庫連接。資料庫要使用 database 隊列驅動,你需要數據表保存任務信息)。
  • 「開發運維效率工具」:Bash實現的輕量級資料庫遷移工具
    shmig輕裝上陣用BASH編寫的資料庫遷移工具目前有很多的資料庫遷移工具,如 DBV,Liquibase, sqitch,flywaydb和在特定框架的工具(對Ruby on Rails的,Yii的,Laravel,...)。但是它們都非常沉重,具有很多依賴性,一些自己的DSL ...
  • Redis-Window Server快速搭建Redis Cluster集群
    集群採用去中心節點方式實現,節點間數據同步通過gossip協議完成狀態互換,客戶端可直接連接redis集群中任一節點獲取數據字典服務,集群中數據持久化通過Hash算法計算出鍵(Key)對應的哈希卡槽(Hash Slot)進行數據持久化操作,集群中數據新增或者遷移節點也能通過Slot的遷移方便的實現。
  • 計算redis的槽 - CSDN
    集群節點的槽分配信息槽(slots)數據結構實際上是一個二進位數組,數組長度為2048個字節,16384個二進位位。Redis集群通過分片的方式來保存資料庫中的鍵值對。集群的整個資料庫被分為16384個槽,即資料庫中的所有鍵都屬於這16384個槽中的一個。集群中每個節點可以處理0~16384個槽。
  • 資料庫遷移搞炸了!沒用這款開源神器的鍋?
    Flyway正是這麼一款工具,通過Flyway和SpringBoot結合使用,在應用啟動時就可以自動升級資料庫表結構,非常方便,推薦給大家!Flyway簡介Flyway是一款資料庫遷移工具,它讓資料庫遷移變得更加簡單。它能像Git一樣對資料庫進行版本控制,支持命令行工具、Maven插件、第三方工具(比如SpringBoot)等多種使用方式。
  • 基於Node.jsORM框架Sequelize的資料庫遷移2
    這個時候就輪到前面提到的遷移腳本上場了!(db:migrate)的時候調用• down:執行撤銷/回滾命令(db:migrate:undo/db:migrate:undo:all)的時候調用在看具體的代碼之前,先來了解一下 Sequelize 提供的對象和類
  • redis集群組建 - CSDN
    redis集群是redis提供分布式資料庫方案, 集群通過分片(Sharding)來進行數據共享,並提供複製和故障轉移功能。  在集群中執行命令在對資料庫中的16384個槽都進行了指派之後,集群就會進入上線狀態,這時客戶端就可以向集群中的節點發送數據命令。
  • Redis 集群之Redis+Codis方案
    Codis介紹Codis 是一個分布式 Redis 解決方案, 對於上層的應用來說, 連接到 Codis Proxy 和連接原生的 Redis Server 沒有顯著區別 (不支持的命令列表), 上層應用可以像使用單機的 Redis 一樣使用, Codis 底層會處理請求的轉發, 不停機的數據遷移等工作,
  • 使用redis-dump備份還原redis
    redis的備份還原方式主要有以下幾種方式rdb文件遷移redis自帶的dump命令第三方redis-dump工具redis-dump工具負責將redis的db,key,ttl,type,value等序列成
  • 將ElastiCache Redis遷移到ec2 Linux實例
    現在我們將一臺ElastiCache for Redis單節點的實例遷移到AWS ec2的Linux實例這裡注意:我們在ElastiCache for Redis的版本是2.8.4,在ec2的Linux實例Redis版本是5.0.9在ec2 Linux實例部署Redis這裡需要特別注意的是