C# 在各种缓存中都有意义

C# 在各种缓存中都有意义,c#,asp.net-mvc,caching,C#,Asp.net Mvc,Caching,我有一个asp.net-MVC应用程序 我想将缓存添加到我的应用程序中 我知道有很多缓存实用程序 我知道它们在使用的层次上有所不同 有人能理解各种缓存方法吗 CurrentContext.Cache MSEnterprise缓存 视图数据 国务袋 输出缓存-VarByParams 局部视图 更新 Dal应该使用什么缓存?Bll?UI?缓存方法取决于您试图实现的目标。我没有使用所有这些缓存方法,但我将解释如何在多个层中使用缓存 假设我们至少有三层web应用托管在多台服务器上,并通过负载平衡器或

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

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

我知道有很多缓存实用程序

我知道它们在使用的层次上有所不同

有人能理解各种缓存方法吗

  • CurrentContext.Cache
  • MSEnterprise缓存
  • 视图数据
  • 国务袋
  • 输出缓存-VarByParams
  • 局部视图
更新
Dal应该使用什么缓存?Bll?UI?

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

假设我们至少有三层web应用托管在多台服务器上,并通过负载平衡器或某些代理进行访问

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

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

对于简单的ui元素,我们使用输出缓存。它通常是一种在简单应用程序上进行缓存的方法,几乎没有什么落后的逻辑。如果数据已更改,则无法很好地控制或删除它。我们在静态元素上使用它,比如缓存部分导航视图。它还可以保存到数据库的行程,但如果数据库值发生更改,则无法从业务逻辑层中对其进行重新设置

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

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

我应该为Dal使用什么缓存?Bll?UI?就像我说的,这并不总是层的问题,但你在缓存什么。但如果简化的DAL和BLL使用可以像Sys.Runtime.Cache一样很好地控制的缓存。UI您可以使用OutputCaching,因为它会缓存结果,所以您不会每次都渲染视图。您可以使用绝对缓存时间,以便在数据更改时输出缓存可以不时刷新。它通常用于高流量站点,因为它需要最少的处理来显示UI。