迁移redis库的某个db

在项目开始的时候,往往会把各种用途的数据放到一个 redis 实例中,如 db1 存放功能 A 的数据、db2 存放功能 B 的数据。

当 redis 的压力上来了之后,往往需要将某个 db 迁移到其它的实例上,如果是整个实例进行迁移,通常会通过 Master-Slave 将数据同步到新机器,然后提升新机器上的 redis 为 Master。

但是遇到只需要迁移 1 个 db 的数据到新的 redis 实例(该实例已有其它数据)的情况,就需要借助 redis 数据迁移工具了,这里介绍两个工具。

假设要将 redis 的 db5 从 192.168.1.100 上的 redis 迁到 192.168.1.101 上的 db5。

redis-copy.py

使用 python 开发。

  • 安装

    sudo pip2 install redis
    wget https://github.com/salimane/redis-tools/raw/master/redis-copy.py
    
  • 开始迁移

    python2 ./redis-copy.py --source=192.168.1.100:6379 --target=192.168.1.101:6379 --databases=5 --limit=1000000000
    python2 ./redis-copy.py --source=192.168.1.100:6379 --target=192.168.1.101:6379 --databases=5 --clean
    

redis-copy (推荐)

使用 ruby 开发。

  • 安装

    gem install redis-copy
    
  • 开始迁移

    ~/.gem/ruby/2.3.0/bin/redis-copy 192.168.1.100:6379/5 192.168.1.101:6379/5
    

比较

redis-copy.py 在迁移过程中 db 号不能改变,需要在源 db 中临时写入大量簿记信息,最终也没有完全清簿记信息(mig:run 键)。默认一次运行迁移 10000 条记录,可以多次运行迁移后面的数据,也可以通过指定 –limit 为一个够大的数量一次性迁移。支持同时迁移多个 db 。

redis-copy 可以任意指定源、目的 db 号,不需要往 redis 写入簿记信息。


redis