我将batsd(使用statsd
)库与jeremy/statsd-ruby客户端用于我的ruby Web应用程序(rails)。我必须保持简单的访问统计。大!我使用上面gem中的statsd.increment('users.visits')
方法。
然后我注意到,此操作一旦创建新的sorted set
(zset
)并且每次都添加一个元素(看起来像"1338932870<X>1
)。
为什么statsd
使用这种方法?使用HINCRBY方法使用simlpe哈希(不是zadd
到zset
)会不会更加轻松和更快吗?
我知道,statsd
是好的和众所周知的乐器,但我想知道,它是redis中的反坦克模式吗?我是redis和nosql的新手,谢谢!
答案 0 :(得分:4)
我不熟悉该软件包,但如果您只是使用HINCRBY,则只需计算度量标准的最后一个值并将其保存在Redis中。我想统计包可能需要存储度量的演变(以便随着时间的推移绘制图形或类似的东西)。
使用zset是一种存储按时间戳排序的事件(即时间序列)的方法,因此可以保留此度量标准演变的历史记录。它比较慢并消耗更多的内存而不仅仅是保留最后一个值,但是你有历史记录。有关完整故事,请参阅下面的诺亚评论。
使用HINCRBY或INCRBY实时聚合计数器,并使用zset存储时间序列是两种常见的Redis模式。