从理论上讲,我的网站上有一个页面/ Controller 操作,它执行一些非常繁重的工作。完成操作大约需要10秒钟。
现在,我使用.NET的outputcache机制将其缓存15分钟(例如,我使用[OutputCache(Duration = 900)]
),如果15分钟后缓存过期并且100名用户在需要的10秒钟内再次请求页面,该怎么办繁重的加工?
可能会问一个简单的问题,但我不确定100%。我希望它是第一,但:-)
谢谢!
最佳答案
好吧,这取决于您如何配置IIS。如果您的工作线程少于100个(例如50个),那么“繁重的工作”将执行50次,使您的服务器瘫痪,然后其余50个请求将从缓存中得到处理。
但是,不,缓存操作结果没有“锁定机制”。在大多数情况下,这将适得其反。
编辑:我相信这是对的,但是Nick的测试则相反,并且我现在没有时间进行测试。自己尝试!不过,答案的其余部分并不依赖于上述内容,我认为这更为重要。
但是,一般而言,没有任何Web请求(无论是否缓存)都需要10秒才能返回。如果我不满意,我会考虑以某种方式预先计算请求的困难部分。如果要缓存HTML,您仍然可以缓存操作结果,但是听起来您的问题要大得多。
您可能还想consider asynchronous controllers。最后,请注意,尽管IIS和ASP.NET MVC不会锁定这种繁重的计算,但是您可以。如果将异步 Controller 与对计算的锁定结合使用,则可以有效地获得所需的行为。如果不进一步了解自己的工作,我无法真正说出这是否是最好的解决方案。
关于ASP.NET(MVC)Outputcache和并发请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2162433/