我们正在构建一个MVC应用程序,当用户第一次登录时,需要加载大量静态数据。
幸运的是,登录期间必须加载的大部分数据都是主数据,并且不会因任何用户而改变 但由于主数据的大小很大,我们认为最好实现缓存服务器端,因为浏览器可能无法保存数据
我已经阅读了Microsoft MVP在codeproject
上发布的OutputCache
帖子,他清楚地解释了缓存的作用以及使用缓存时需要注意的事项。
所以我通过添加行
[OutputCache(Duration = 10, VaryByParam = "none",
Location=OutputCacheLocation, NoStore=true)]
在我的ActionMethod之上。
但我无法调试数据是从缓存加载还是发生了其他服务器命中。 所以我的第一个问题是如何调试输出缓存是否正常工作?
然后,在我们以前的MVC应用程序中,我们使用了httpcontext.current.cache
,它工作得很好。
所以,这是我的第二个问题,这就是为什么我更喜欢OuputCache
而不是httpcontext.current.cache
,为什么不反之呢?
它们对缓存应用程序有何不同?
修改:1
这是我的登录视图控制器中的方法
public ActionResult GetRegions(string Ids)
{
objRegionsResult = GetRegionsList();
if (!string.IsNullOrEmpty(Ids))
objRegionsResult = objRegionsResult.Where(x => Ids.Split(',').Contains(x.Type.ToString())).ToList();
return Json(objRegionsResult, JsonRequestBehavior.AllowGet);
}
private List<MORegionMaster> GetRegionsList()
{
RequestUri = "Home/GetRegions";
HttpResponseMessage response = ConnectAPI(RequestUri);
if (response.IsSuccessStatusCode)
{
objRegionsResult = response.Content.ReadAsAsync<List<MORegionMaster>>().Result;
}
}
return objRegionsResult;
}
所以上面的方法就是我点击了api控制器,它会点击businesslogic类,然后点击数据库并返回数据表。
答案 0 :(得分:0)
当我们想要缓存操作的结果时,我们使用OutputCache(不是静态文件,而是缓存业务逻辑结果)。当我们想要在特定时间内为所有用户提供数据时,我们会使用此功能。
当我们想要缓存一些可以在同一请求中多次使用的数据时,我们使用httpcontext.current.cache,比如缓存“当前登录的用户对象”,以避免多次db命中。
此外,输出缓存的生命周期不仅限于当前的http请求,但httpcontext.current.cache的生命周期仅限于当前的http请求。