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

Can the WAIT command provide strong consistency in Redis?

大家好,

在Redis sentinel/cluster setup中,我们可以使用WAIT命令和slaves的总数来确保Redis服务器之间的强一致性吗?为什么不呢?

亲切的问候

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

  1. 同步复制到分布式系统上的大多数节点。
  2. 一种协调领导层变更(基本上是故障转移)的方法,以确保只能选举保留前任领导层中已确认操作的完整历史记录的节点。

WAIT 不提供“2”。 Redis 中的复制过程是由 Sentinel 或 Redis Cluster 执行的,并不能提供 属性 2 (因为 Redis 中的同步复制是例外而不是规则,所以没有太多关注那个方面)。然而,Redis 复制所做的是尝试提升 出现的从站以保留最大数量的数据 。虽然这不会改变 Redis 故障转移的理论保证,但仍然会丢失已确认的写入,这意味着如果您使用 WAIT,则会有更多的从属服务器在其内存中进行给定操作,反过来又会很多更有可能的是,在发生故障转移时,操作将被保留。然而,虽然这会使丢弃已确认操作的故障模式难以触发,但始终存在具有此属性的故障模式。

TLDR: WAIT 不会使 Redis 线性化,它所做的是确保指定数量的从站将接收写入,从而进行故障转移更健壮,但没有任何硬性保证。