2012-04-23 40 views
0

我有一个asp.net-MVC应用程序。在各种缓存中有意义

我想添加缓存到我的应用程序。

我知道有许多缓存实用程序,

我知道他们在哪里,他们应该使用的层不同。

有人可以在各种缓存方法有一定意义吗?

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

更新 什么缓存应该I U为达尔? BLL? UI?

回答

1

缓存方法取决于你想要达到的目标。我没有使用所有这些缓存方法,但我会解释我们如何在多个层中使用缓存。

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

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

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

对于简单的UI元素,我们使用输出缓存。它通常是在简单的应用程序上进行缓存的方法,而且几乎没有逻辑。如果数据已更改,则无法很好地控制或删除它。我们在静态元素上使用它,例如缓存局部导航视图。它还可以节省访问数据库的时间,但如果数据库值发生变化,则无法从业务逻辑层重新缓存数据库值。

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

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

+0

Dal应使用哪些缓存? BLL? UI? – 2012-04-23 15:47:01

+0

就像我说的那样,它并不总是层的问题,但是你在缓存什么。但是,如果简化DAL和BLL使用像Sys.Runtime.Cache一样可以很好控制的缓存。 UI可以使用OutputCaching,因为它会缓存结果,所以您不会每次都呈现视图。您可以使用绝对缓存时间,以便输出缓存可以立即刷新,然后如果数据发生更改。它经常用于高流量的网站,因为它要求最少的处理来展示用户界面。 – 2012-04-23 16:03:00