在项目开始的时候,往往会把各种用途的数据放到一个 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 写入簿记信息。