在 MVC 中缓存列表集合

本文关键字:列表 集合 缓存 MVC | 更新日期: 2023-09-27 18:30:16

我正在开发一个搜索页面,其中包含多个具有不同数据库值的下拉列表。我开始研究缓存技术,并遇到了一些可能的解决方案

  1. 输出缓存
  2. HttpContext.Cache

当我更多地了解不同类型的缓存时,我记得此应用程序还提供指标页面,这些页面可以利用搜索页面中的相同下拉菜单。现在,我想要的不是搜索页面解决方案,而是站点范围的解决方案。

在这两种情况下,我检索不同值的方式几乎相同。我有一个带有各种"可用"字段的视图模型。这些字段填充在构造函数中。

public class SearchViewModel
{
    public AvailableSites {set;get;}
    public SearchViewModel()
    {
        AvailableSites = db.SomeTable.Select(s => s.Site).Distinct();
    }
}

这种方式设置我的模型时,每次用户点击搜索或指标页面时,应用程序都必须命中数据库以填充下拉菜单。缓存将大大减少它对数据库和网络的负载。

似乎

输出缓存仅适用于控制器操作,因此这似乎是不可能的。

非重复查询的结果很少更改。这是我想使用 HttpContext 缓存的东西吗?在这种情况下,哪种类型的缓存效果最好?

另外,将其集成到我的 MetricBase(每个指标 VM 都继承自此)和 SearchViewModel 中的最佳方法是什么?在这种情况下,继承似乎有点矫枉过正。我会只包含这样的类private AvailableValue Values {set;get;}并通过Values.AvailableSites访问它们吗?

在 MVC 中缓存列表集合

System.Runtime.Caching.MemoryCache 提供了一个强大的内存缓存(请参阅 http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache(v=vs.100).aspx)。

据我了解,它基于 System.Web.Caching,但不依赖于 System.Web 程序集,因此您可以将其放在业务层中。

这篇博文应该可以帮助您实现:http://deanhume.com/Home/BlogPost/object-caching----net-4/37