python3实现 redis数据copy脚本

因为某中原因我需要将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()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以使用redis-py库来实现Redis数据迁移。以下是一个简单的示例代码,演示如何从一个Redis实例复制数据到另一个Redis实例。 首先,确保你已经安装了redis-py库。可以使用以下命令来安装: ``` pip install redis ``` 然后,使用以下代码实现数据迁移: ```python import redis def migrate_data(source_host, source_port, source_password, destination_host, destination_port, destination_password): # 连接源Redis source_redis = redis.Redis(host=source_host, port=source_port, password=source_password) # 连接目标Redis destination_redis = redis.Redis(host=destination_host, port=destination_port, password=destination_password) # 获取所有键 keys = source_redis.keys() # 迁移数据 for key in keys: key_type = source_redis.type(key) if key_type == b'string': value = source_redis.get(key) destination_redis.set(key, value) elif key_type == b'list': values = source_redis.lrange(key, 0, -1) for value in values: destination_redis.rpush(key, value) elif key_type == b'set': values = source_redis.smembers(key) for value in values: destination_redis.sadd(key, value) elif key_type == b'zset': values = source_redis.zrange(key, 0, -1, withscores=True) for value, score in values: destination_redis.zadd(key, {value: score}) elif key_type == b'hash': items = source_redis.hgetall(key) for field, value in items.items(): destination_redis.hset(key, field, value) print("数据迁移完成!") # 示例用法 migrate_data('source_host', 6379, 'source_password', 'destination_host', 6379, 'destination_password') ``` 请确保替换示例中的源Redis和目标Redis的主机、端口和密码信息。这段代码会将源Redis中的所有键和对应的值迁移到目标Redis中。 请注意,该示例代码只迁移了常见的Redis数据类型(字符串、列表、集合、有序集合和哈希)。如果你使用了其他数据类型,你需要相应地进行修改。 希望对你有所帮助!如有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值