Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Redis计算过去24小时内的事件数_Redis - Fatal编程技术网

使用Redis计算过去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的事件->创

看起来,这是一项普通的任务,但我还没有找到解决办法

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

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

比如说,

  • 6月22日13:27的事件->创建密钥_22_13=1
  • 6月22日13:40的事件->递增键_22_13=2
  • 6月22日18:45的事件->创建密钥_22_18=1
  • 6月23日16:00的事件->创建密钥\u 23\u 16=1
  • 获取6月23日16:02的事件总和->键的总和_22_17-_22_23,_23_00-_23_16:在我们的键中只有_22_18和_23_16,结果是2。密钥_22_13和_22_13已过期
  • 此方法不准确(它计算每24+0..1小时的事件数),也不太通用(如果我需要过去768分钟或2.5个月的事件数,我将选择哪个键?)


    您有更好的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分钟的间隔。这是精度和资源消耗之间的平衡。