我有一些指标(比如登录用户的数量,或SQL查询等等),我想定期收集一些与时间相关的统计数据。
例如,我想知道在某个特定的年,月,周,日甚至小时内注册了多少用户。
我想也许Redis可能很合适。但是我无法想象存储这些统计数据的好策略。我唯一的想法是存储数天,数周等的独立计数器,并立即将它们全部碰撞。
你是怎么做到的?我需要一个好主意。或许Redis对我的任务没有任何好处。
答案 0 :(得分:1)
如果你需要的只是每个时期的计数,你建议的多计数器方法是一个好的方法。在单个流水线事务中递增5个计数器为O(1),而设置操作为O(log n + m),可能具有较大的n / m值。
Frank建议的解决方案确实有它的位置 - 我使用类似的东西,我需要知道发生了哪些动作而不是多少动作。显然,存储每个操作的详细信息比计数器占用更多内存,但是现在通常可用的RAM数量可以存储数百万条记录,然后再成为问题。
答案 1 :(得分:0)
我只会使用排序集,其中得分是自纪元(unix时间)以来以秒为单位的时间戳。假设您有一组已排序的登录,并且您想查看2010年发生的登录次数,只需将20101231 23:59:59和20100101 00:00:00转换为秒并使用这些是zcount的最大和最小参数。
这里明显的困难是自己处理时间转换,但它实际上很容易,因为它是标准的Unix格式。您可以将%命令与%S(至少在Linux上)一起使用,或者使用系统调用time(),localtime()和mktime(),以及构建于其上的特定语言中的任何可用方法。这些系统调用。
我确信Windows中有一些等效的范例,但我没有任何经验。