每个用户的输出缓存

本文关键字:输出 缓存 用户 | 更新日期: 2023-09-27 18:18:57

我们有一个内存密集的仪表板,每个用户都不同。如何根据当前登录的userID缓存响应,该userID没有作为参数传递,但需要从当前登录的用户派生。这是我的理解VaryByParam查看请求上下文

也有一个值在数据库中,当这个改变缓存需要重置

每个用户的输出缓存

在你的Web.config:

<caching>
  <outputCacheSettings>
    <outputCacheProfiles>
      <add name="Dashboard" duration="86400" varyByParam="*" varyByCustom="User" location="Server" />
    </outputCacheProfiles>
  </outputCacheSettings>
</caching>

在你的Controller/Action:

[OutputCache(CacheProfile="Dashboard")]
public class DashboardController : Controller { ...}

然后在你的Global.asax:

    //string arg filled with the value of "varyByCustom" in your web.config
    public override string GetVaryByCustomString(HttpContext context, string arg)
    {
        if (arg == "User")
        {
            // depends on your authentication mechanism
            return "User=" + context.User.Identity.Name;
            //?return "User=" + context.Session.SessionID;
        }
        return base.GetVaryByCustomString(context, arg);
    }

本质上,GetVaryByCustomString将允许您编写一个自定义方法,通过返回一个字符串来确定是否会有一个缓存hit/miss,该字符串将被用作每个缓存副本的某种"哈希"。

稍微修改一下你的代码,并在你的表单中添加一个隐藏的字段,该字段具有userId哈希值,当你张贴时

或者更好的方法是使用VaryByCustom方法,并根据用户cookie值进行更改。

这里有一个很好的参考:

http://codebetter.com/darrellnorton/2004/05/04/asp-net-varybycustom-page-output-caching/