【问题标题】:ASP.Net MVC 3.0 Attribute [OutputCache] - Is this global, or by session?ASP.Net MVC 3.0 属性 [OutputCache] - 这是全局的还是按会话的?
【发布时间】:2011-03-16 16:21:04
【问题描述】:

创建 ASP.Net MVC 3.0 应用程序时,我可以在操作中包含 OutputCache 属性,并定义缓存将持续的持续时间。在此持续时间之后,任何导致该操作触发的活动都将导致此缓存结果被丢弃并刷新。

我的问题是... 此缓存输出是否适用于所有用户会话,或者此缓存选项是否特定于每个会话。换句话说,如果 user1 发出请求,其中 OutputCache 属性设置为 1 小时的操作会在中午(下午 12:00)开始他们的请求。用户 2 向同一操作发出请求,但时间是中午 30 点(下午 12:30)。两个用户的缓存结果是否相同,如果是,user2 的缓存输出是否会在下午 1:00 刷新?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-3 outputcache


    【解决方案1】:

    视情况而定。如果您的 URL 包含任何用户特定的部分(例如 ~/blogs/userid/1),那么是的,否则它不是特定于会话的。您可以根据参数的变化对其进行微调,...

    ASP NET MVC 中的缓存与 Web 窗体没有什么不同,它只是基于 URL 的相同基础架构。

    【讨论】:

    • 我有一个缓存问题here。感谢您的意见
    【解决方案2】:

    您可以像 Aliostad 所说的那样使用 varybyparam,持续时间将是特定于会话的,否则不是。

    [OutputCache(Duration=10, VaryByParam="none")]
    

    http://www.asp.net/mvc/tutorials/improving-performance-with-output-caching-cs

    【讨论】:

    • 我喜欢你的回答,因为你提供了一个例子。谢谢你。 +1。因为 Aliostad 实际上首先提供了相同的答案,所以我将答案授予 @Aliostad。
    • VaryByParam 唯一能做的就是根据查询字符串或表单值创建唯一的缓存副本。仅当用户 ID 或其他标识值包含在查询或表单参数中时,缓存才会是特定于会话的。
    【解决方案3】:

    您可以使用VaryByCustom 轻松使其依赖Session 并返回SessionId(非常便宜的操作)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      相关资源
      最近更新 更多