C# .Net MVC 下的 [OutputCache(Duration = 300)] 缓存穿透问题
近期做压测优化时,特意选用了无侵入式代码注解方式[OutputCache(Duration = 300)] 对接口做了5分钟缓存。依据业务预期,5分钟的缓存能确保我们的接口顺利通过压测。就在满怀信心等着通过的报告时,却被打脸了。 报告显示,在前2分钟,接口返回都正常无错误,接下来就出现了错误返回。仔细想想,这个问题在于,缓存失效的一瞬间,大量的请求穿透过去,导致请求直接压到了需要保护的后端服务。 于是,采用lock的方式,防止缓存击穿! protected static object sysncObject = new object(); // 开缓存了,防止缓存失效的时候发现穿透效应 lock (sysncObject) { //原来的业务逻辑 } 经过lock处理后,压测顺利通过。目前没有发现,OutputCache的Cache保护措施,只能使用DIY进行击穿保护。
Copy and paste this URL into your WordPress site to embed
Copy and paste this code into your site to embed