电脑上按Ctrl + D,下次访问更方便
服务分类

Redis数据复制的几种方法

如果要把一个Redis数据库的数据复制到另一个Redis数据库,我总结了一下,通常我们有这么几个办法:

一、通过Redis主从复制的办法复制

一般情况下,只需要修改从库的配置文件即可。

二、用Python脚本复制

写一个python脚本,也能达到完全复制的效果。代码如下:

# coding: utf-8
# !/usr/bin/python3
import logging
import redis

logging.basicConfig(level=logging.NOTSET)
# 源库 注意修改db(哪一个库)
# 新库
redis_client_from = redis.StrictRedis(host='192.168.0.1', port=6379, password='Redis2018@)!*', db=2,
                                    decode_responses=True)

redis_client_to = redis.StrictRedis(host='192.168.0.2', port=6379, password='Redis2018@)!*', db=2,
                                    decode_responses=True)


def main():
    cnt = 0
    print("数据复制开始")
    for k in redis_client_from.keys():
        data_type = redis_client_from.type(k)
        # 字符串类型的数据处理
        if data_type == 'string':
            v = redis_client_from.get(k)
            redis_client_to.set(k, v)
        # list类型的数据处理
        elif data_type == 'list':
            values = redis_client_from.lrange(k, 0, -1)
            redis_client_to.lpush(k, values)
        # set类型的数据处理
        elif data_type == 'set':
            values = redis_client_from.smembers(k)
            redis_client_to.sadd(k, values)
        # hash类型的数据处理
        elif data_type == 'hash':
            keys = redis_client_from.hkeys(k)
            for key in keys:
                value = redis_client_from.hget(k, key)
                redis_client_to.hset(k, key, value)
        else:
            print("未知类型,不知道怎么操作!!!")
        cnt = cnt + 1
    print(f"数据总数{cnt}")
    

if __name__ == '__main__':
    main()
    print("操作完成啦!!!")

把上面的Python脚本改改配置就可以用。

如果需要用跳板机才能访问,可能还需要用到sshtunnel这个库。

注意,这个Python文件读取Redis的所有key用的是keys()这个方法,可能会有性能问题,你的数据量非常大,建议用scan命令来操作。

三、通过Redis-shake来复制

Redis-shake还可以把rdb文件回复复制到目标Redis数据库。如果不懂Python代码,建议用这种方式。

工具介绍:通过Redis-shake将自建Redis迁移至阿里云 – 云数据库 Redis – 阿里云 (aliyun.com)

发表回复

登录后才能评论
联系我们

联系我们

微信客服:

fuwu360微信客服

工作时间:周一至周五,9:30-18:30,节假日休息

返回顶部