2010-10-30 39 views
0

在每個控制器調用我有一個代碼,從web服務獲取一些用戶屬性。我想緩存這些爲每個用戶,所以我只打一次web服務。什麼是緩存用戶信息在我的基地控制器在asp.net mvc

在控制器方法中緩存代碼的最佳方式是什麼,這樣可以避免在每個URL請求上觸擊數據庫,而且在另一個用戶登錄時不會緩存一個用戶信息?

回答

2

您可以使用ASP.NET會話來存儲每個用戶的值。

1

查看Enterprise library的緩存塊。我們在工作中使用它來緩存查找,所以您只需打一次我們的WCF服務,而不是數千次來完全相同的數據。

你也可以使用會話,我強烈建議,除非你的用戶很小。

if (Session("user") == null) 
{ 
    Session("user") = CallWebService.GetUser(userId); 
} 

爲什麼你應該保持會話小,爲this webpage

避免存儲在會話變量太多數據,並確保您的會話超時是合理的。這可以使用大量的服務器內存。請記住,在用戶關閉瀏覽器後,存儲在會話變量中的數據可能會長時間掛起。太多的會話變量會使服務器癱瘓。

+0

這似乎有點矯枉過正。是不是有一個簡單的解決方案(一個屬性或東西)說每個用戶的緩存?) – leora 2010-10-30 14:17:27

+0

@ooo - 我編輯它的另一個選項,使用會話 – Martin 2010-10-30 14:38:23

+0

你建議不使用會話的原因是什麼?你的意思是什麼,除非你的「用戶」非常小? – leora 2010-10-30 16:50:36

相關問題