WAIT命令能否在Redis中提供强大的一致性



问候语溢出,

在Redis哨兵/集群设置中,我们可以使用WAIT命令和从服务器的总数来确保Redis服务器之间的强一致性吗?为什么不呢?

亲切问候

WAIT实现Redis的同步复制。为了实现强一致性,同步复制是必需的,但还不够。强一致性实际上是两件事的总和:

  1. 同步复制到分布式系统上的大多数节点
  2. 一种协调领导层变更(基本上是故障切换)的方法,这样可以保证只有保留前一个领导层中已确认操作的完整历史记录的节点才能被选中

WAIT不提供"2"。Redis中的复制过程由Sentinel或Redis Cluster执行,无法提供属性2(由于Redis中同步复制是例外而非规则,因此没有太多关注这方面)。然而,Redis复制所做的是尝试提升似乎保留了最大数据量的从属服务器。虽然这并没有改变Redis故障切换的理论保证,即仍然可能丢失已确认的写入,但这意味着如果使用WAIT,则会有更多的从机将给定的操作放入其内存中,而在发生故障切换时,该操作更有可能被保留。然而,尽管这将使丢弃已确认操作的故障模式难以触发,但始终存在具有此属性的故障模式。

TLDR:WAIT并没有使Redis线性化,它所做的是确保指定数量的从机将接收写入,这反过来又使故障切换更加健壮,但没有任何硬性保证。

最新更新