仅保存最近7天的下载次数(PHP7 + Redis),而无需每年保存所有365天的统计信息

时间:2019-06-15 11:55:03

标签: php redis

使用PHP7 + Redis(phpredis),我只需要统计最近7天的文件下载量,而不必每年保存整个365天的统计信息(从而使Redis数据库保持较小状态),我只对最近7天感兴趣。

我正在考虑这样做:

解决方案1:

我保存这样的下载次数:

$redis->hIncrBy("file-id-2", "downloads-".date("Y-m-d"), 1);

这将每天在键“ file-id-2”上添加一个字段"downloads-".date("Y-m-d")。这不是很好,因为Redis数据库会随着时间增加很多。

因此,要解决此问题,我正在考虑使用cronjob来列出所有Redis密钥,然后遍历它们,并删除与过去8天相同的密钥字段,即"downloads-".date("Y-m-d", strtotime("-8 days")

缺点是密钥(文件ID)会随着时间的增长而增加,因此这将很耗时,并且可能需要很多小时才能完成cronjob工作。

解决方案2:

我增加了下载次数,并删除了过去8天:

$redis->hIncrBy("file-id-2", "downloads-".date("Y-m-d"), 1);
$redis->hDel("file-id-2", "downloads-".date("Y-m-d", strtotime("-8 days"));

这将需要两次Redis操作,但更加“自动”。

您有什么建议?

这可以通过其他更聪明的方式完成吗?

谢谢您的帮助。

0 个答案:

没有答案