何时以及如何在asp.net mvc中进行缓存操作?

4
更新:我还发现了ncache,它似乎很有用,并且了解到stackoverflow使用redis进行缓存。我也接触过memcached,看起来是更好的选择。
我找到了this,但我需要知道如何缓存我的一些LINQ查询并有效地使用它们。我在asp.net mvc中发现了输出缓存,还有其他的缓存方法吗?

我是一个新手,以前从未使用过缓存,所以如果有人能指导我正确的方向,我会非常感激。主要想知道在什么情况下需要缓存,以及如何在asp.net mvc中进行缓存操作。


这完全取决于您的应用程序类型。它主要是只读数据还是会有很多编辑操作?它是在一个服务器上运行还是分布在一个农场中?您是否已经确定了应用程序的性能瓶颈? - marcind
是的,我发现一些查询在使用分析器时成为了瓶颈,所以我正在尝试对它们进行缓存处理。 - Vishal
除了缓存之外,还有几件事需要考虑:1)是否有优化查询的方法(例如,这是一个N+1的情况吗?),2)在适当的表和键上是否有索引/聚集?http://ayende.com/Blog/archive/2008/12/01/solving-the-select-n1-problem.aspx&http://msdn.microsoft.com/en-us/library/aa933131%28SQL.80%29.aspx - Ryan
好的,我也会看一下,谢谢。 - Vishal
1个回答

2
根据我的经验,应用级缓存很少是解决性能问题的正确方法,几乎总会引起更多问题。
在进行任何缓存之前,您应该首先:
(i)分析您的应用程序和查询以查看是否可以直接解决它们(例如,查询模式过于宽泛(获取未显示的列)或过于深入(例如获取比您显示的更多行),太频繁(懒加载可能会导致您需要的往返次数更多),太昂贵(不良表设计可能意味着您需要更多连接),或者表本身可能没有正确索引;
(ii)全面审视您的网站和用户体验,看看如何提高感知性能(例如,在静态内容上设置适当的浏览器级缓存标头)。使用AJAX和类似jQGrid的分页网格视图可能会消除许多数据库访问,因为页面其他内容不会改变。
在解决了真正的问题后,您可能会考虑缓存。
但在这之前,请做一个简单的计算:升级服务器的成本与实施缓存并跟踪奇怪的陈旧缓存问题所需的开发和测试时间相比如何?有时只需升级即可更省钱...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接