11

我们有 75 台(并且还在不断增加)服务器需要通过 Redis 共享数据。理想情况下,所有 75 台服务器都希望通过INCRBYFLOAT操作写入 Redis 中的两个字段。我们预计最终在这两个领域可能会有数百万的每日写入操作和数十亿的每日读取。此数据必须是持久的。

我们担心 Redis 锁定可能会导致多次重试写入操作,同时多次尝试增加同一字段。

问题:

  • 在非常重的负载下,多个同时INCRBYFLOAT在单个字段上是一个坏主意吗?
  • 我们是否应该有一个外部进程“汇总”单独的字段并写入这两个字段?(这引入了另一个故障点)
  • 写入时读取这两个字段会阻塞吗?
4

2 回答 2

15

Redis 不锁定。此外,它是单线程的;所以没有竞争条件。读取或写入不会阻塞。

您可以INCRBYFLOAT在同一个密钥上运行数百万个,而不会出现任何问题。无需外部流程。阅读这些字段不会造成任何问题。

也就是说,“两个键的数百万次更新”听起来很奇怪。如果您可以解释您的用例,也许在 Redis 中可能有更好的方法来处理它。

于 2012-05-18T09:53:41.113 回答
7

由于 Redis 是单线程的,您可能希望使用主从复制将写入与读取分开,因为是的,写入通常会阻塞读取。

或者,您可以考虑为此使用Apache Zookeeper,它提供了可靠的集群协调,没有单点故障(如单个 Redis 实例)。

于 2012-05-18T09:58:40.080 回答