代码之家  ›  专栏  ›  技术社区  ›  eugeneK

使用会话变量进行ASP.NET缓存?

  •  1
  • eugeneK  · 技术社区  · 15 年前

    我有一些社区网站,数据库里有大约40000个用户,有很多属性栏。有两个页面根据某种标准(如性别)显示最新用户和在线用户。

    我做了一些sql技巧,每页只得到10行,这样就不会有太多信息被sql server发送回来用于搜索、收件箱等。以及其他基于用户的数据,但在线和最新用户对我网站的所有用户都是全局的,因此我可以使用某种缓存来实现这些。问题是,我在登录时使用会话集中的一些用户变量,因此如果使用默认输出缓存会话,则会与其他用户交换。

    你将如何解决这个问题?我知道的方法不多,但这里的一些人有很多经验,所以我等待你的意见。我认为这是一个普遍的问题,任何人谁做了或做了应用程序与许多用户在其中。可能是StackOverflow船员????

    干杯

    2 回复  |  直到 15 年前
        1
  •  1
  •   Pete    15 年前

    您可以说,您不能使用输出缓存,因为您正在使用特定于用户的数据来生成输出。但是您也可以使用程序缓存来存储您在代码隐藏文件(HutpCurror)缓存中访问的对象。

    所以您可以在代码隐藏文件中编写如下内容(伪代码):

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

    然后不是缓存输出,而是缓存用于生成输出的部分数据。

        2
  •  -1
  •   Kim Johansson    15 年前

    为什么不使用httpcontext.items属性将其存储在全局而不是本地(即:httpcontext.session)?