单节点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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值