因为某中原因我需要将redis 中的数据 copy到同一个redis 的另外一个库中,简单写了一个python脚本
import redis
src_host =''
src_port = 6379
src_db = 0
src_password = ''
target_host =''
target_port = 6379
target_db = 0
target_password = ''
conn_list= []
def getRedisConn(host,port,db,password):
redis_conn = redis.Redis(host=host, port=port, db=db, password=password,decode_responses=True)
return redis_conn
def getSrcRedisConn():
redis_conn = redis.Redis(host=src_host, port=src_port, db=src_db, password=src_password,decode_responses=True)
conn_list.append(redis_conn)
return redis_conn
def getTargetRedisConn():
redis_conn = redis.Redis(host=target_host, port=target_port, db=target_db, password=target_password,decode_responses=True)
conn_list.append(redis_conn)
return redis_conn
def closeRedisConn():
for conn in conn_list:
conn.close()
def srcRedisKeyCount():
src_redis = getSrcRedisConn()
type_list = [] # 统计数据类型
#开始统计所有kye的数据类型
print('start get redis data type,please wait...')
key_count_map = {}
for key in src_redis.keys():
data_type = src_redis.type(key) # 获取数据类型
key_count_map[data_type] = key_count_map.get(data_type,0) + 1
if data_type not in type_list:
type_list.append(data_type)
print('redis key data count:',len(src_redis.keys()))
print('redis data type count:',len(type_list))
print('redis key count:',key_count_map)
def redisDbCopy():
print('redis db copy start ...')
src_redis = getSrcRedisConn()
target_redis = getTargetRedisConn()
#target_redis.flushdb
# 遍历源 Redis 实例中的所有 key
for key in src_redis.keys('*'):
# 判断 key 对应的数据类型
data_type = src_redis.type(key)
# 根据数据类型进行相应的处理
if data_type == b'string':
value = src_redis.get(key)
target_redis.set(key, value)
elif data_type == b'hash':
fields_and_values = src_redis.hgetall(key)
target_redis.hmset(key, fields_and_values)
elif data_type == b'list':
values = src_redis.lrange(key, 0, -1)
target_redis.rpush(key, *values)
elif data_type == b'set':
values = src_redis.smembers(key)
target_redis.sadd(key, *values)
elif data_type == b'zset':
values = src_redis.zrange(key, 0, -1, withscores=True)
target_redis.zadd(key, {member: score for member, score in values})
else:
print(f'Error: unsupported data type {data_type} for key {key}')
# 关闭 Redis 连接
closeRedisConn()
print('redis db copy end')
if __name__ == '__main__':
host=''
passWord=''
#源redisconfig
src_host = host
src_password = passWord
src_db = 100
#目标redisconfig
target_host = host
target_password = passWord
target_db = 20
srcRedisKeyCount()
# redisDbCopy()