一尘不染

锁定和Redis

redis

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

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

问题:

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

阅读 294

收藏
2020-06-20

共1个答案

一尘不染

Redis不会锁定。同样,它是单线程的;因此没有比赛条件。读或写不会阻塞。

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

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

2020-06-20