使用Redis计算过去24小时内的事件数
看起来,这是一项普通的任务,但我还没有找到解决办法 我需要计算过去24小时内用户事件的数量(例如,他留下了多少评论)。我对旧数据不感兴趣,所以关于一个月前添加的评论的信息应该从Redis中删除 现在我只看到一个解决方案。我们可以制作包含用户ID和一天中的小时数的密钥,增加它的值。然后我们将得到24个值并计算它们的和。每个密钥都有24小时过期时间 比如说,使用Redis计算过去24小时内的事件数,redis,Redis,看起来,这是一项普通的任务,但我还没有找到解决办法 我需要计算过去24小时内用户事件的数量(例如,他留下了多少评论)。我对旧数据不感兴趣,所以关于一个月前添加的评论的信息应该从Redis中删除 现在我只看到一个解决方案。我们可以制作包含用户ID和一天中的小时数的密钥,增加它的值。然后我们将得到24个值并计算它们的和。每个密钥都有24小时过期时间 比如说, 6月22日13:27的事件->创建密钥_22_13=1 6月22日13:40的事件->递增键_22_13=2 6月22日18:45的事件->创
您有更好的Redis数据类型解决方案吗?您可以在每次创建密钥后使用Redis EXPIRE query
SET comment "Hello, world"
EXPIRE comment 1000 // in seconds
PEXPIRE comment 1000 // in milliseconds
细节。你的模型看起来不错。当然,这不是普遍的,但这是你为了表现而必须牺牲的东西 我建议你继续这样做。如果您需要另一个时间跨度进行报告(768分钟),您可以从存储注释的mysql中获得该时间跨度(您这样做,对吗?)。这会比较慢,但至少会提供查询
如果您需要更快的响应或更高的精度,您可以在redis中以分钟分辨率(每分钟一个计数器)存储计数器。这如何回答他的问题?@Sergio如果我们选择所有键,它会在过去24小时内拉取所有键(如果我们指定24小时过期),当然,我在写入“键22和22过期”时暗示过期如果您将设置过期,过期的密钥将被删除,但我们将如何检索数据?用键名写一个例子。现在,我明白你的问题了。您需要动态参数来获取日期范围内的键,如sql
WHERE date>somedate
?谢谢!如果我们需要分钟的精度,那么每个请求需要1440个密钥的多重获取。我不喜欢它。我认为,如果没有其他可能提高的话,小时精度对我来说是可以的。例如,你可以有5分钟的间隔。这是精度和资源消耗之间的平衡。