单节点redis与redis集群之间的数据迁移(Python)

正常情况下数据迁移,redis作为缓存,数据不需要迁移。

但公司把redis当数据库使用了。所有有了下面的需求。

下面是redis集群数据导出到单节点redis

示例:

import redis
from rediscluster import StrictRedisCluster

'''
redis集群导出
pip install redis==2.10.6
pip install redis-py-cluster==1.3.5
'''
startup_nodes = [
    {'host': '10.1.10.41', 'port': 7101},
    {'host': '10.1.10.41', 'port': 7102},
    {'host': '10.1.10.41', 'port': 7103},
    {'host': '10.1.10.42', 'port': 7201},
    {'host': '10.1.10.42', 'port': 7202},
    {'host': '10.1.10.42', 'port': 7203},
    {'host': '10.1.10.43', 'port': 7301},
    {'host': '10.1.10.43', 'port': 7302},
    {'host': '10.1.10.43', 'port': 7303}
]
old_r = StrictRedisCluster(startup_nodes=startup_nodes, password="Gg8|$JIOsc")
'''
单节点redis导入
'''
new_r = redis.Redis(host='172.20.1.42', port=7101, password="Zli)IJJ4%o", db=0)
c_keys = old_r.keys()
print("------ start ------")
for i in c_keys:
    # 过期时间
    overdue_time = old_r.pttl(i)
    # 判断类型
    key_type = old_r.type(i)
    if key_type == b'string':
        if overdue_time == -1:
            new_r.set(name=i, value=old_r.get(i))
        elif overdue_time == -2:
            print("******不存在******")
        else:
            new_r.set(name=i, value=old_r.get(i), px=overdue_time)
    elif key_type == b'set':
        if overdue_time == -1:
            new_r.sadd(i, old_r.smembers(i))
        elif overdue_time == -2:
            print("******不存在******")
        else:
            new_r.sadd(i, old_r.smembers(i))
            new_r.expire(i, overdue_time)
    else:
        print(key_type+"类型数据未处理!")
print("------  end  ------")

单节点redis数据导出到redis集群反之即可。

  • 0
    点赞
  • 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、付费专栏及课程。

余额充值