可以使用以下命令通过哨兵发现redis master:
from redis.sentinel import Sentinel
sentinel = Sentinel([('127.0.0.1', 26379)])
master_server = sentinel.master_for('mymaster')
现在将数据写入主节点:
master_server.setex(key, 120, value)
# do something
master_server.setex(key, 120, new_value)
现在,在# do something
期间,如果master_server
崩溃,sentinel
将通过投票促使奴隶掌握。因此,master_server.setex(key, 120, new_value)
将抛出 MasterNotFoundError 。
解决方法是 try-catch 此块;有没有办法让redis自动处理主发现?由于在代码中的任何地方放置 try-catch 都会使代码变得冗余和混乱。
答案 0 :(得分:0)
Redis sentinel实际上 会自动重新发现master,因为它使用SentinelConnectionPool。虽然它确实有一些问题 - 请参阅我的recent question - 这听起来像是你的redis设置没有成功选出一个新的主人。
你是否有一个奇数的哨兵有适当的法定人数?
https://redis.io/topics/sentinel
查看redis sentinel页面,确保您没有遇到一些常见的陷阱。