Redis primary/secondary 没有复制

Redis primary/secondary without replication

我是 Redis 新手。我阅读了他们关于 Sentinel and Replication 的文档,其中他们谈到了副本如何尽可能地与主服务器保持同步,但是如果主服务器在成功写入后失败,副本可能不会收到那个写。如果 Sentinel 随后将此副本标记为新的主服务器,则该副本可能提供陈旧数据。

如果我不能承受失去一致性并且更喜欢它而不是可用性,我如何关闭复制以便当 Sentinel 将新副本标记为主副本时,所有第一个请求都是缓存未命中并且我的缓存可以慢慢预热而不是返回可能过时的数据?

另外,这是个好主意吗?还有其他好的选择吗?

I cannot afford to lose consistency and prefer it over availability

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

假设您有几个客户端,一个主服务器 M1 和三个副本服务器 R2、R3、R4。客户端 C5 向 M1 写入新的银行账户余额,M1 立即永久失效,R2 被提升为 master M2。 Master 在回复 client 之前没有从 replica 获得 acknowledge。在将回复发送到 C5 之前,服务器之间不会发生类似 paxos 的共识协议。

C5 可以记住每个写入请求中嵌入的计数器/时间戳,忘记写入有效负载,并检测过时的读取。但是客户端 C6 不能,除非您在协议之外快速可靠地提供此类数据。 Nathan Fritz observes that your app could issue a write and then a PUBLISH event, and monitor multiple replicas with a LISTEN for that event, delaying its report of success to end user. Consider incorporating derecho 如果需要虚拟同步的可靠承诺,请将其添加到您的应用程序中。 redis 的生产版本针对的是问题的不同部分space,而不是您的主要兴趣。