【问题标题】:ASP.NET Caching with Session variable?带有会话变量的 ASP.NET 缓存?
【发布时间】:2009-10-27 18:07:56
【问题描述】:

我有一些社区网站,数据库中有大约 40.000 个用户,其中包含许多属性列。有两个页面根据某种标准显示最新和在线用户,即。性别。

我做了一些 SQL 技巧,每页只获取 10 行,因此 sql server 发送回的信息不多,用于搜索、收件箱等以及其他基于用户的数据,但在线用户和最新用户对所有用户都是全局我的网站,因此我可以为这些使用某种缓存。问题是我在登录时在 Session 设置中使用了一些用户变量,因此如果我使用默认输出缓存 Session 将与其他用户交换。

你会如何解决这个问题?我知道一些方法,但这里的一些人有很多经验,所以我等待你的意见。我认为对于任何做过或做过有很多用户的应用程序的人来说,这是一个常见的问题。也许是 StackOverflow 的工作人员???

干杯

【问题讨论】:

    标签: c# asp.net session caching


    【解决方案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);
    

    那么你不是在缓存输出,而是用于生成输出的部分数据。

    【讨论】:

      【解决方案2】:

      为什么不使用 HttpContext.Items 属性来存储它,以便全局存储而不是本地存储(IE:HttpContext.Session)?

      【讨论】:

      • 我在那里存储用户 ID、用户年龄和其他一些字段。如何在全球范围内拯救这些人?
      • 我真的不明白这个问题... :S 哦,经过更多阅读。您需要按会话变量进行缓存。默认输出缓存不会影响会话,除非您在使用 outputcache 呈现的控件中使用用户特定的内容。
      • 输出缓存会影响我的控件,因为我使用 ?userID=something 当从 Session 中获取某些内容时,所以如果我输出缓存页面,我会获取第一个用户的用户 ID,以便在输出缓存周期中使用该页面。
      • VaryByParam 基于查询字符串。
      • ?userID=something is not querystring?
      猜你喜欢
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 2020-01-06
      • 2015-03-13
      • 2013-11-12
      • 1970-01-01
      相关资源
      最近更新 更多