http - 如何在一天内存储服务器上的请求数?

标签 http logging redis counter

我有一个情况,我需要计算我的 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://redis.io/commands/hget

关于http - 如何在一天内存储服务器上的请求数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36881342/

相关文章:

redis - 确保redis中排序集的唯一性

android - 如何从 picasso 的缓存中检索图像?

python - 为什么在 python 中记录自定义错误会显示为 root?

ruby-on-rails - 开发日志文件超过 GitHub 的文件大小限制,即使在删除文件后也是如此

ubuntu - 创建服务器 TCP 监听套接字 * :6379: bind: Address already in use

node.js - 在 redis 键/值中搜索多个值

Java 和 PHP POST 请求不起作用

java - 我可以为游戏客户端使用什么客户端连接?

ios - 如何在 xcode 中解析和分类来自 AlamoFire 的 JSON 响应

c# - 有用的日志格式/格式?