Ruby redis batsd(statsd)计数器

Ruby redis batsd(statsd)计数器,ruby,nosql,redis,statsd,Ruby,Nosql,Redis,Statsd,我将(使用statsd)库与客户端一起用于ruby web应用程序(rails)。我必须保持简单的访问统计。伟大的我使用上述gem中的statsd.increment('users.visions')方法 然后我注意到,这个操作一次创建新的排序集(zset),每次添加一个元素(看起来像“13389328701)。 为什么statsd使用这种方法?使用simlpe散列的方法(而不是zadd到zset)会更容易和更快吗 我知道,statsd是一种很好的知名工具,但我想知道,这是redis中的计数器标

我将(使用
statsd
)库与客户端一起用于ruby web应用程序(rails)。我必须保持简单的访问统计。伟大的我使用上述gem中的
statsd.increment('users.visions')
方法

然后我注意到,这个操作一次创建新的
排序集
zset
),每次添加一个元素(看起来像
“13389328701
)。 为什么
statsd
使用这种方法?使用simlpe散列的方法(而不是
zadd
zset
)会更容易和更快吗


我知道,
statsd
是一种很好的知名工具,但我想知道,这是redis中的计数器标准模式吗?我对redis和nosql都是新手,谢谢!

我不熟悉这个软件包,但如果你只使用HINCRBY,你只需计算度量的最后一个值,并将其保存在redis中。我猜是一个统计软件包y需要存储度量的演变(以便绘制随时间变化的图形或类似的东西)

使用zset是一种存储按时间戳(即时间序列)排序的事件的方法,因此可以保存此度量的演变历史。它比只保留最后一个值慢得多,消耗的内存也多,但您有历史记录。完整的故事见下面的Noah评论


使用HINCRBY或INCRBY实时聚合计数器和使用zset存储时间序列是两种常见的Redis模式。

这几乎就是为什么我们在batsd中使用zset的原因——我们需要历史记录,我们还希望能够轻松地截断历史记录,这样我们就不会永远将其保留在Redis中(以限制内存使用)。我们还使用INCRBY进行其他级别的聚合,然后以类似于zset的结构将值写入磁盘。