1

redis master 可以通过 sentinel 使用:

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)

现在, while # do something,如果master_server崩溃,sentinel将通过投票将一个奴隶提升为主人。因此,master_server.setex(key, 120, new_value)将抛出MasterNotFoundError

一种解决方法是尝试捕获此块;有没有办法让redis自动处理主发现?由于在代码中到处放置try-catch会使代码变得多余和混乱。

4

1 回答 1

0

Redis sentinel 实际上确实会自动重新发现 master,因为它使用SentinelConnectionPool。虽然它确实有一些问题——请参阅我最近的问题——听起来这里的问题是你的 redis 设置没有成功地选择一个新的主人。

您是否有奇数个具有适当设置的法定人数的哨兵?

https://redis.io/topics/sentinel

查看 redis sentinel 页面以确保您没有遇到一些常见的陷阱。

于 2017-09-12T15:43:33.000 回答