Redis Batsd(Statsd)计数器

3

我在我的Ruby Web应用程序(Rails)中使用了具有statsdbatsd库,并使用jeremy/statsd-ruby客户端来保持简单的访问统计数据。很棒!我使用上面的宝石(gem)中的statsd.increment('users.visits')方法。

然后我注意到,这个操作每次都会创建一个新的sorted setzset)并添加一个元素(看起来像"1338932870<X>1)。为什么statsd要使用这种方法?使用简单的哈希(而不是zaddzset)和HINCRBY方法不会更容易和更快吗?

我知道,statsd是一个好的、众所周知的工具,但我想知道,在Redis中,这是否是计数器的标准模式?我刚开始接触Redis和NoSQL,谢谢!

1个回答

4
我对这个包不够熟悉,但如果你只使用HINCRBY,你将只计算指标的最后一个值,并将其保存在Redis中。我猜测统计包可能需要存储指标的演变(以便随时间绘制图表或类似情况)。
使用zset是一种按时间戳排序的存储事件的方法(即时间序列),因此可以保留该指标演变的历史记录。它比仅保留最后一个值慢且消耗更多内存,但是你有历史记录。请参阅Noah下面的评论以获取完整故事。
使用HINCRBY或INCRBY实时汇总计数器,并使用zset存储时间序列是两种常见的Redis模式。

4
事实上,这几乎正是为什么我们在batsd中使用zset的原因 - 我们想要历史记录,但也想要能够轻松地截断该历史记录,以便不会永远在Redis中保留它(以限制内存使用)。我们还使用INCRBY进行其他级别的聚合,然后将这些值写入磁盘中类似于zset的结构中。 - Noah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接