使用Redis计算每个过去24小时的事件数

时间:2012-06-22 10:35:38

标签: redis

似乎,这是常见的任务,但我还没有找到解决方案。

我需要计算过去24小时内用户事件的数量(例如,他留下了多少评论)。旧的数据对我来说并不感兴趣,因此应该从Redis中删除有关月前添加的评论的信息。

现在我只看到一个解决方案。我们可以制作包含用户ID和时刻的密钥,增加它的值。然后我们将获得24个值并计算它们的总和。每个密钥都有24小时到期。

例如,

  1. 6月22日,13:27的事件 - >创建密钥_22_13 = 1
  2. 6月22日13:40的活动 - >递增键_22_13 = 2
  3. 6月22日18:45的活动 - >创建密钥_22_18 = 1
  4. 活动于6月23日16:00 - >创建密钥_23_16 = 1
  5. 在6月23日16:02获得活动总和 - >键的总和_22_17 - _22_23,_23_00 - _23_16:在我们的键中它只有_22_18和_23_16,结果是2.键_22_13和_22_13已过期。
  6. 这种方法不准确(它计算每24 + 0 ... 1小时的事件数)并且不那么普遍(如果我需要每个持续768分钟或2.5个月的事件数量,我会选择什么键?)。 / p>

    您对Redis数据类型有更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

你的模特看起来很好。当然,它不是普遍的,但是为了保持高效,你必须牺牲。

我建议你继续这样做。如果您需要另一个时间段进行报告(768分钟),您总是可以从存储注释的mysql中获取此信息(您这样做,对吧?)。这将会变慢,但至少会提供查询。

如果您需要更快的响应或更高的精度,您可以使用分钟分辨率(每分钟一个计数器)将计数器存储在redis中。

答案 1 :(得分:-1)

您可以在每次创建密钥后使用redis EXPIRE查询。

SET comment "Hello, world"
EXPIRE comment 1000 // in seconds
PEXPIRE comment 1000 // in milliseconds

详情here