我是Redis的新手。我阅读了有关SentinelReplication的文档,他们在其中讨论了副本如何尝试尽可能与主副本保持同步,但是如果主副本在成功写入后失败,副本仍然可能不会收到该副本。写。如果Sentinel然后将该副本标记为新的主副本,则该副本有可能提供过时的数据。
如果我不能承受失去一致性的偏爱,而不是可用性,我该如何关闭复制,以便在Sentinel将新副本标记为主副本时,所有第一个请求都将是缓存未命中,并且我的缓存可以缓慢地预热而不是返回可能过时的缓存数据?
另外,这是个好主意吗?还有其他好的选择吗?

最佳答案



尚不清楚redis自动故障转移是否适合您的应用程序。看起来每个客户端都需要仔细跟踪服务器的可用性。

假设您有几个客户端,一个主服务器M1和三个副本R2,R3,R4。客户C5将新的银行帐户余额写入M1,该余额立即永久失效,R2被提升为主M2。母版在回复客户端之前未从副本获得确认。在将回复发送到C5之前,服务器之间不会发生类似paxos的共识协议(protocol)。

C5可以记住每个写入请求中嵌入的计数器/时间戳,忘记写入有效负载并检测陈旧的读取。但是客户端C6不能,除非您在协议(protocol)之外快速可靠地提供此类数据。 Nathan Fritz观察到您的应用程序可能会发出一个write事件,然后发出PUBLISH事件,并使用LISTEN监视该事件的多个副本,从而延迟了向最终用户报告成功的过程。如果需要虚拟同步的可靠保证,请考虑将derecho合并到您的应用程序中。 Redis的生产版本针对问题空间的部分与您的主要兴趣不同。

关于redis - Redis主/次而不复制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47786488/

10-16 19:27