我有一个情况,我需要计算我的 HTTP 服务器上的请求数量,按小时和请求类型汇总。 例如 - 如果我有 3 个独特的资源请求,这就是我想要获得的输出数据
Resource /a - 10 req between 10pm - 11pm, 13 req between 11pm - 12am
Resource /b - 14 req between 10pm - 11pm, 17 req between 11pm - 12am
Resource /c - 12 req between 10pm - 110m, 16 req between 11pm - 12am
不需要实时报告。它可以忍受几个小时的延迟。我知道我可以通过日志解析来实现这一点。但只是想知道是否有更好的方法来存储这种数据。假设 Redis 中有一个实时计数器,其中使用 url + hour
生成 key 并定期将其转储到其他数据库,假设每 2 小时一次。
最佳答案
将它存储在 redis 中的一种方法是使用哈希:-
哈希键作为日期时间样本
哈希键:-“2016-04-27-10-11”
"2016-04-27-10-11" :{
"md5-request-uri-1" : "count of request",
"md5-request-uri-2" : "count of request"
}
您可以使用的 Redis 函数是:- hash incr by (HINCRBY)
HINCRBY 2016-04-27-10-11 md5-request-uri-1 1
http://redis.io/commands/HINCRBY
现在你可以有一个每小时 cron 来解析过去一小时的日志,并以上述格式将它们存储在 redis 中。
要获取所有带计数的资源,您可以使用:- HGETALL 要获取特定资源的计数,您可以使用:- HGET
关于http - 如何在一天内存储服务器上的请求数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36881342/