2009-10-25 205 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