2009-10-25 67 views
1

我有一些社區網站,在數據庫中有大約40,000個用戶,有很多屬性欄。有兩個頁面,最新和在線用戶根據某種標準顯示,即。性別。與會話變量的ASP.NET緩存?

我已經做了一些SQL技巧,每頁只有10行,所以沒有太多的信息被髮送回來的sql服務器的搜索,收件箱等..和其他基於用戶的數據,但在線和最新的用戶是全球所有我的網站的用戶,因此我可以使用這種緩存。問題是我在登錄時使用會話中的某些用戶變量,因此如果我使用默認輸出緩存會話將與其他用戶交換。

你會如何解決這個問題?我知道很少的方法,但在這裏的一些人有很多經驗,所以我等待你的意見。我認爲對於任何曾經或應用過很多用戶的人來說,這是一個普遍問題。也許StackOverflow船員?

乾杯

回答

1

你說,你不能使用輸出緩存,因爲你正在使用用戶特定的數據來生成輸出。但你也可以使用緩存編程方式來存儲你的代碼中訪問隱藏文件(HttpContext.Cache)對象

所以,你可以寫在你的代碼是這樣的(僞代碼)隱藏文件:

var cacheableUserData = (UserData)Cache("UserData"); 
if (cacheableUserData== null) 
{ 
    cacheableUserData= GetDataFromDB(); 
    Cache.Add("UserData", cacheableUserData); // Set cache expiration here 
} 
var dataToPresent = CombineData(userData, loggedInUserData); 

然後,您沒有緩存輸出,而是用於生成輸出的部分數據。

-1

爲什麼不使用HttpContext.Items屬性將其存儲在這樣它的存儲,而不是全球的本地(IE:HttpContext.Session)?

+0

我在那裏存儲userID,userAge和其他幾個字段。如何在全球範圍內節約成本? – eugeneK 2009-10-25 17:35:42

+0

我真的不明白這個問題...:S 哦,經過一些更多的閱讀。您需要通過會話變量進行緩存。 默認輸出緩存不會影響會話,除非您在使用outputcache呈現的控件中使用user-sepcific內容。 – 2009-10-25 17:40:52

+0

輸出緩存會影響我的控件,因爲我使用?userID =從Session獲取某些內容時所以如果我輸出緩存頁面,我獲得第一個用戶的用戶ID以在輸出緩存週期中使用頁面。 – eugeneK 2009-10-25 18:58:12