打电话给HINCRBY多少合理?

时间:2011-07-29 18:51:13

标签: statistics redis scaling counter

我正在尝试重新发明轮子并在Redis中存储一些统计数据。

我正在考虑热切地聚合,并在每次新事件发生后立即递增所有相关计数器(它可能每秒发生几次)。

每个事件需要召唤HINCRBY 5-50次,而我最初的目标是每秒5-100个事件。

Redis太过分了吗? 如果是,我应该瞄准一些下限(每个事件10次?只有一次?)? 如果不是,它可以在任何这些参数中扩展(我更感兴趣的是扩展到1000个事件吗?10000?)?

我显然也要收集垃圾。我打算通过为每个事件所需的每个哈希调用EXPIRE来做这件事(不超过2-5次,因为一些计数器在同一个哈希中)。可以吗?

1 个答案:

答案 0 :(得分:4)

坚果。如果硬件适合它,Redis将能够处理负载。显然你应该尽快制作原型并尝试一下,但这绝对是Redis应该能够处理的事情。

我建议你考虑扩展。预先解决扩展问题比等待它成为问题要容易得多。 Redis(还)没有任何集群解决方案,而且你受RAM(和一个CPU)的限制,所以最终你需要一些扩展到更多服务器的方法。

执行此操作的方法是客户端分片,即对于每个操作,您对键进行散列并查看它所在的服务器,然后与该服务器通信(这显然使得使用多个键的操作很难执行,所以你可能不得不围绕那个设计)。 Ruby客户端有一些开箱即用的支持,但如果你使用另一个驱动程序(and Salvatore has a guide, too),自己做起来并不困难(虽然不方便)。

我建议从在同一台机器上运行的两个或四个Redis实例开始(每个CPU一个,或类似的东西),再加上运行从机的另一台机器用于冗余和故障转移(您还可以在每台服务器上运行两个主机和两个从机) )。这样,如果您需要增长,将实例移动到其他服务器并不会太多。如果你有四个实例,你将能够毫不费力地移动到四台机器,因为你所要做的就是在新机器上设置一个从机,等待它同步然后再用作主机。如果你没有四个实例可以开始,那么移动到新机器意味着手动移动键,这可能需要很多工作。