我有一个 asp.net-MVC 应用程序。
我想向我的应用程序添加缓存。
我知道有很多缓存实用程序,
我知道它们在应该使用的层上有所不同。
有人可以对各种缓存方法有所了解吗?
- CurrentContext.Cache
- MSEnterprise 缓存
- 查看数据
- 国家包
- 输出缓存 - VarByParams
- 部分视图
更新 我应该为 Dal 使用什么缓存?比尔? 用户界面?
我有一个 asp.net-MVC 应用程序。
我想向我的应用程序添加缓存。
我知道有很多缓存实用程序,
我知道它们在应该使用的层上有所不同。
有人可以对各种缓存方法有所了解吗?
更新 我应该为 Dal 使用什么缓存?比尔? 用户界面?
缓存方法取决于您要实现的目标。我没有使用所有这些缓存方法,但我将解释我们如何在多个层中使用缓存。
假设我们至少在多个服务器上托管了三层 Web 应用程序,并通过负载平衡器或某些代理进行访问。
对于静态数据或不需要经常更新的数据,我们使用它提供的 System.Runtime.Caching,Dictionary 并且我们将数据存储在单个服务器上。假设我们在应用程序中有一些设置,我们需要在每个请求(如站点元数据)上进行设置。我们希望通过缓存来保存行程并加载到数据库中。
对于博客之类的东西,我们使用 memcached 之类的分布式缓存,所有服务器共享一些内存来存储字典值。但是由于缓存中只有一个数据实例,因此任何服务器都可以更改或删除缓存项,并且所有服务器都会更新数据。数据库查询通常很昂贵,因此您将已处理的数据保留在缓存中,但您知道何时更改或删除数据。
对于简单的 ui 元素,我们使用输出缓存。它通常在简单的应用程序上缓存几乎没有逻辑的方法。如果数据已更改,您将无法很好地控制或删除它。我们在静态元素上使用它,例如缓存导航的部分视图。它还可以节省对数据库的访问,但如果数据库值发生更改,您将无法从业务逻辑层重新缓存它。
我们不需要任何其他方法,但缓存通常非常重要。我们更喜欢在较低级别手动缓存,编写和使用需要更多时间,但提供更好的控制。
编辑:使用缓存时,我强烈建议为缓存编写代理类,因此在测试中您可以将其关闭以查找消耗性能的代码部分。