这一定很容易,但我的大脑拒绝解决这个问题。
在ASP.net中,可以直接使用应用程序状态创建全局“页面请求计数器”。只需增加一个应用程序变量:
Application("Hitcount") = Application("HitCount") + 1
或其他什么。但是,我如何仅测量过去一分钟内收到的点击数?我需要在过去的60秒内持续计算应用程序命中数,以便我能够对传入的请求进行一些流量管理。例如。如果当前负载超过每分钟1,000次点击,则重定向到某处。
答案 0 :(得分:2)
最好使用日志分析工具,使用更宽的时间窗口分析请求日志,从而为您提供这些统计信息。有一些非常好的,可让您在历史观看时间窗口之间切换,并查看一天,一周,一个月的高峰流量。
我建议您不要将匹配记录插入数据库,除非您的站点数量很少。避免将请求延迟与数据库绑定,除非您确定性能开销在允许的容差范围内。仪器应该尽量不影响它测量的服务器,除了非常轻微的开销,这就是为什么事后运行良好的日志分析。
第一项业务是调整IIS以添加一些非默认字段,这些字段是标准W3C日志记录格式的一部分。
配置这些高级字段的一种方法是通过IIS管理器,在>下;记录日志记录 - >选择字段
需要字节recvd / sent和timespent等字段才能使用其中一个第三方分析器来获得好的图表。
答案 1 :(得分:2)
您可以使用内存缓存执行此操作。这将计算超过10分钟的滚动请求计数。但是我还没有测试过它的性能。
public BaseController() : base()
{
CacheItemPolicy policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTime.UtcNow.AddMinutes(10);
MemoryCache.Default.Add(Guid.NewGuid(), "RequestCount", policy);
}
public int RequestCountPerMinute
{
get
{
return MemoryCache.Default
.Where(kv => kv.Value.ToString() == "RequestCount").Count() / 10;
}
}