2017-05-27 17 views
0

我们正在建立一个MVC应用程序,那里是当用户第一次登录。输出缓存或httpcontext.current.cache我的MVC应用程序

幸运的是大部分的数据必须被装入巨大的静态数据在登录时加载的是全部主数据,并且对于任何用户都不会改变 但是由于主数据的大小很大,我们觉得最好是实现高速缓存服务器端,因为浏览器可能无法容纳数据

我已阅读了微软MVP上OutputCachecodeproject文章,他清楚地解释了缓存的作用以及使用缓存时需要注意的事项。 所以我实现所有的,他在我的控制器建议仅仅通过增加线

[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; 
} 

所以上述方法,其中i击中API控制器,它inturn击中businesslogic类,并随后数据库并返回数据表。

回答

0

我们使用OutputCache来缓存动作的结果(不是静态文件,而是缓存业务逻辑结果)。当我们想要在特定的持续时间内为所有用户提供数据时,我们会使用它。

当我们想缓存一些可以在缓存“当前登录用户对象”的相同请求中多次使用的数据时,我们使用httpcontext.current.cache来避免多个数据库命中。

另外,输出缓存的生存期并不仅限于当前的http请求,而且httpcontext.current.cache的生存期仅限于当前的http请求。

+0

不,您可能会误解我的要求。我的要求是不缓存js,css文件,我需要缓存每次用户登录时通过API调用获取的主数据。但对于所有不同的用户,主数据保持不变,所以我需要缓存数据在服务器 –

+0

中是否要缓存业务逻辑? –

+0

你是从API调用中获取主数据还是在请求中的某处使用它? –