python连接redis集群三主三从报错 raise ClusterError(‘TTL exhausted.‘)

在这里插入图片描述
在循环里面不停的set和get,会报这个错误,
用redis-py-cluster
我看过很多文章,这个错误就是很离谱,java连接集群能自动搜索key所在的哪个redis里面,但是python这个包不会

所以循环就会报错,因为他尝试连到一个错误的redis里面,
只能用最笨的办法解决,

class te():
    def __init__(self,) -> None:
        self.node1=1
        self.startup_nodes1 = [
            {"host":"127.0.0.1", "port":6372},  
        ]
        self.startup_nodes2 = [
            {"host":"127.0.0.1", "port":6375},  
        ]
        self.startup_nodes3 = [
            {"host":"127.0.0.1", "port":6373},  
        ]
    def connect(self):
        self.redisconn = StrictRedisCluster(startup_nodes=self.startup_nodes1,password="1234567", skip_full_coverage_check=True,decode_responses=True,)
    def set(self,key,text):
        a=0
        while a<10:
            try:
                self.redisconn.set(key,text)
                break
            except:
                if(self.node1==1):
                    self.node1=2
                    self.redisconn = StrictRedisCluster(startup_nodes=self.startup_nodes2,password="1234567", skip_full_coverage_check=True,decode_responses=True,)
                elif(self.node1==2):
                    self.node1=3
                    self.redisconn = StrictRedisCluster(startup_nodes=self.startup_nodes3,password="1234567", skip_full_coverage_check=True,decode_responses=True,)
                elif(self.node1==3):
                    self.node1=1
                    self.redisconn = StrictRedisCluster(startup_nodes=self.startup_nodes1,password="1234567", skip_full_coverage_check=True,decode_responses=True,)
            a=a+1
    def get(self,key):
        a=0
        while a<10:
            try:
                re=self.redisconn.get(key)
                break
            except:
                if(self.node1==1):
                    self.node1=2
                    self.redisconn = StrictRedisCluster(startup_nodes=self.startup_nodes2,password="1234567", skip_full_coverage_check=True,decode_responses=True,)
                elif(self.node1==2):
                    self.node1=3
                    self.redisconn = StrictRedisCluster(startup_nodes=self.startup_nodes3,password="1234567", skip_full_coverage_check=True,decode_responses=True,)
                elif(self.node1==3):
                    self.node1=1
                    self.redisconn = StrictRedisCluster(startup_nodes=self.startup_nodes1,password="1234567", skip_full_coverage_check=True,decode_responses=True,)
            a=a+1
        return re
def test():
    

    list = [
        '14900000001',
        '14900000002',
        '14900000003',
        '14900000004',
        '14900000005',
        '14900000006',
        '14900000007',
        '14900000008',
        '14900000009',
        '14900000010'
    ]

    
    conn=te()
    conn.connect()

    for i in range(0,len(list)):
        conn.set('user_phone_'+list[i],i)
        print(conn.get('user_phone_'+list[i]))
if __name__=="__main__":
    test()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python连接Redis集群,可以使用第三方库redis-py-cluster。这个库是专门为了支持Redis集群操作而设计的,并且一直在维护。你可以使用pip进行安装,命令是pip3 install redis-py-cluster。 以下是一个示例代码,展示了如何使用redis-py-cluster连接Redis集群: ``` from rediscluster import StrictRedisCluster # 连接redis集群 class RedisCluster(object): def __init__(self,conn_list): self.conn_list = conn_list def connect(self): try: # 非密码连接redis集群 # redisconn = StrictRedisCluster(startup_nodes=self.conn_list) # 使用密码连接redis集群 redisconn = StrictRedisCluster(startup_nodes=self.conn_list, password='123456') return redisconn except Exception as e: print(e) print("错误,连接redis集群失败") return False # Redis集群连接列表 redis_basis_conn = [{'host': '192.168.10.168', 'port': 7201}, {'host': '192.168.10.169', 'port': 7201}, {'host': '192.168.10.170', 'port': 7201}, {'host': '192.168.10.171', 'port': 7201}, {'host': '192.168.10.142', 'port': 7201}, {'host': '192.168.10.143', 'port': 7201}] # 连接Redis集群 res = RedisCluster(redis_basis_conn).connect() # 检查连接结果 if not res: print("连接Redis集群失败") else: print("连接Redis集群成功") ``` 使用redis-py-cluster库,你可以通过传入连接列表中的所有节点信息来连接Redis集群。在上述示例代码中,我们使用了一个名为RedisCluster的类来进行连接,并在初始化方法中传入了连接列表。然后,在connect方法中,我们尝试连接Redis集群,如果连接成功,返回一个Redis连接对象,否则返回False表示连接失败。最后,我们根据连接的结果输出相应的提示信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值