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

标签 redis consistency redis-sentinel redis-cluster

问候溢出,

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

亲切的问候

最佳答案

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

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

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

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

关于redis - WAIT命令能否在Redis中提供强一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33629339/

相关文章:

python - 扭曲的 RPC 是否能保证按顺序到达?

mysql - mysqldbcompare 实用程序的问题。数据库一致性检查每次都失败

redis - 将 Redis 从 v3.2.12 更新到 v6

spring - 使用Lettuce+SpringDataRedis进行Redis哨兵认证

php - redis 服务器每 5 分钟崩溃一次

ruby-on-rails - 使用 Soulmate 和 Redis 进行自动完成时未定义的方法 `downcase'

python - django redis 与 django 显示 ulimit 错误

lua - 我们可以像存储过程一样在 Redis 中同时执行多个操作吗

amazon-web-services - DynamoDB 更新是否具有强一致性?

Redis Slave - 在复制握手中向主服务器发送命令 : -Writing to master: Unknown error