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)