关于 Redis Enterprise 中 WAIT 命令的注意事项

最后更新时间:2024 年 4 月 18 日

目的

本文旨在理解 WAIT 命令在开源版 (OSS) 和 Redis Enterprise (RE) 中的行为差异,以及已知的 Bug 和特殊情况。

范围

可以使用 WAIT 命令,通过 Redis 客户端库开发客户端,并将其指向 Redis OSS 和 Enterprise 部署。

详情

WAIT 命令在 OSS 和 RE 中的工作方式相同。在响应客户端之前需要等待多少个副本,取决于应用程序传递给 WAIT 命令的参数。在 RE 中,这个数量总是 1,因为 一个 RE 数据库只支持一个 HA 分片;但是请注意,这并不能保证写操作已复制到 HA 分片。

如果 WAIT 返回 1,则表示 HA 分片已确认已提交写操作。如果 WAIT 超时或返回 0,则我们无法确定发生了什么,因此无法做出保证。应用程序需要决定是忽略、重复操作,还是协调处理发生的情况。

仅等待一个副本对 写入可用性 有严重影响,特别是在故障转移、维护、完全同步副本所需时间等场景下。在某些预期的时间段内,WAIT 将会超时并报告甚至无法复制到 1 个副本。 在 Redis Enterprise 中,WAIT 返回零的情况大大增加,包括“常规”维护活动。因此,在设计时应解决几个问题,以应对存在维护活动时 WAIT 的行为。

  • WAIT 的超时时间应为多久?
  • 当 WAIT 无法满足时,应用程序应如何处理?

参考资料

关于 WAIT 特性的描述,请参阅文章“使用 WAIT 命令实现强一致性”。