zoukankan      html  css  js  c++  java
  • 使用rdb文件进行redis数据迁移--python脚本

    查找了一些redis迁移的方法,一般做法就是

    1. 从源数据库把rdb文件保存,然后传到新的主机上,启动新的redis即可

    2. 把新的redis当做源数据库的slave,同步数据

    今天开发提了一个测试需求,要求把一个备份的rdb文件数据保存到另一个redis(110主机)的15号库中(默认的是0),这样就不会影响redis(110主机)原有的数据。我在网上找了一个python,实现了这个功能。下面是原文:

    ------------------------------------------

    原文链接:http://www.cnblogs.com/lesliefang/p/4711204.html

    老大让把 一台机器上 redis 中所有的数据,迁移到另一台机器上
    查了一下可以拷贝 rdb 文件, 此方法只适用于迁移到一个新的库, 迁移到正在使用的库就不行了, 而且 rdb 里面是所有的 db, 你只想迁移某一个 db 也是不行的。
    设置 master  slave 也是可以的, 数据会自动同步,也很简单
    最笨最容易想到的方法当然是写个脚本,从原库中读出所有数据,写入到另外一个库中,如下:

    # coding=utf-8
    import redis
    
    redis_from = redis.StrictRedis(host='127.0.0.1', port=6379, db=10)
    redis_to = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)
    
    if __name__ == '__main__':
        cnt = 0
        for k in redis_from.keys():
            data_type = redis_from.type(k)
    
            if data_type == 'string':
                v = redis_from.get(k)
                redis_to.set(k, v)
    
            elif data_type == 'list':
                values = redis_from.lrange(k, 0, -1)
                redis_to.lpush(k, values)
    
            elif data_type == 'set':
                values = redis_from.smembers(k)
                redis_to.sadd(k, values)
    
            elif data_type == 'hash':
                keys = redis_from.hkeys(k)
                for key in keys:
                    value = redis_from.hget(k, key)
                    redis_to.hset(k, key, value)
    
            else:
                print 'not known type'
    
            cnt = cnt + 1
    
        print 'total', cnt

    现在有rdb文件,测试用redis(100),想要迁移rdb中数据到redis(110)的15号db中,而且不影响原有数据。进行如下操作

    100:

    1. 安装python,python的redis扩展

    2. 将rdb文件放到redis-100的数据文件夹下,启动之后redis-100上就有了rdb的备份数据

    3. 确认110重启之后,修改脚本文件中的redis_from和redis_to变量信息,运行脚本。

    4. 等待脚本运行完成,到110上确认数据迁移完毕。

    110:

    1. 去掉认证设置

    2. 重启redis

    -------

    最笨也许最好用。

  • 相关阅读:
    HDU 4578
    Luogu 3373
    HDU 6343
    2018牛客网暑期ACM多校训练营(第五场) F
    2018牛客网暑期ACM多校训练营(第五场) E
    2018牛客网暑期ACM多校训练营(第四场) A
    POJ 3580
    HDU 1890
    ZOJ 4029
    2018牛客网暑期ACM多校训练营(第三场) H
  • 原文地址:https://www.cnblogs.com/ExMan/p/11024824.html
Copyright © 2011-2022 走看看