锁定和Redis

时间:2012-05-18 09:41:24

标签: locking redis scalability

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

我们担心Redis锁定可能导致重复尝试写入操作,同时尝试增加相同的字段。

问题:

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

2 个答案:

答案 0 :(得分:14)

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

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

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

答案 1 :(得分:5)

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

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