使用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操作,但更加“自动”。
您有什么建议?
这可以通过其他更聪明的方式完成吗?
谢谢您的帮助。