2017-05-27 18 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調用中獲取主數據還是在請求中的某處使用它? –