在各种缓存中有意义

时间:2012-04-23 13:30:56

标签: c# asp.net-mvc caching

我有一个asp.net-MVC应用程序。

我想在我的应用中添加缓存。

我知道有很多缓存工具,

我知道他们应该使用它们的层次不同。

有人能在各种缓存方法中有所了解吗?

  • CurrentContext.Cache
  • MSEnterprise缓存
  • 的ViewData
  • StateBag
  • 输出缓存 - VarByParams
  • PartialView

更新 我应该为Dal使用什么缓存? BLL? UI?

1 个答案:

答案 0 :(得分:1)

缓存方法取决于您要实现的目标。我没有使用所有这些缓存方法,但我将解释我们如何在多个层中使用缓存。

假设我们在多台服务器上托管了至少三个分层Web应用程序,并通过负载均衡器或某些代理进行访问。

对于静态数据或不必经常更新的数据,我们使用System.Runtime.Caching它提供,Dictionary和我们将数据存储在单个服务器上。让我们说我们在应用程序中有一些设置,我们需要在每个请求,如网站元数据。我们希望通过缓存来保存行程并加载到数据库。

对于博客这样的东西,我们使用像memcached这样的分布式缓存,所有服务器共享一些内存来存储Dictionary值。但由于缓存中只有一个数据实例,因此任何服务器都可以更改或删除缓存项,并且所有服务器都将具有更新的数据。数据库查询通常很昂贵,因此您可以将已处理的数据保留在缓存中,但您知道何时更改或删除数据。

对于简单的ui元素,我们使用输出缓存。它经常在简单的应用程序上缓存,几乎没有逻辑。如果数据已更改,则无法很好地控制或删除它。我们在静态元素上使用它,比如缓存部分导航视图。它还节省了到数据库的行程,但是如果要更改数据库值,则无法从业务逻辑层重新调度它。

我们不需要任何其他方法,但缓存通常非常重要。我们更喜欢在较低级别手动缓存,编写和使用需要更多时间,但可以提供更好的控制。

编辑: 使用缓存时,我强烈建议为缓存编写代理类,因此在测试中,您可以将其关闭以查找性能消耗代码部分。