【问题标题】:OutputCache serving long-stale dataOutputCache 提供长期过时的数据
【发布时间】:2023-03-31 14:36:01
【问题描述】:

我很困惑...回复thisthis“元”问题...

一个非常基本的http请求:

GET http://stackoverflow.com/feeds/tag?tagnames=c%23&sort=newest HTTP/1.1
Host: stackoverflow.com
Accept-Encoding: gzip,deflate

到达的路线装饰有:

[OutputCache(Duration = 300, VaryByParam = "tagnames;sort",
    VaryByContentEncoding = "gzip;deflate", VaryByCustom = "site")]

如果您包含 if-modified-since 或 旧数据

重复且不正确提供 304(无变化) 200,即

HTTP/1.1 200 OK
Cache-Control: public, max-age=0
Content-Type: application/atom+xml; charset=utf-8
Content-Encoding: gzip
Expires: Fri, 01 Jul 2011 09:17:08 GMT
Last-Modified: Fri, 01 Jul 2011 09:12:08 GMT
Vary: *
Date: Fri, 01 Jul 2011 09:42:46 GMT
Content-Length: 14714
(payload, when decoded = some long-stale data)

如您所见,它在 5 分钟的时段过去将近半小时;看起来 OutputCache 的内部根本没有注意到时间;p 它会过期最终(事实上,它刚刚这样做了 - 我的 Fri, 01 Jul 2011 09:56:20 GMT 请求终于得到了新数据),但不是任何地方都喜欢准时。

更新:

相信如果我们去掉 accept-encoding 标头,它会起作用,但不是;这也失败了 - 它只是在不同的循环中失败(这是我们应该期待的,因为密钥不同,由VaryByContentEncoding提供):

GET http://stackoverflow.com/feeds/tag?tagnames=c%23&sort=newest HTTP/1.1
Host: stackoverflow.com

给予:

HTTP/1.1 200 OK
Cache-Control: public, max-age=0
Content-Type: application/atom+xml; charset=utf-8
Expires: Fri, 01 Jul 2011 10:09:58 GMT
Last-Modified: Fri, 01 Jul 2011 10:04:58 GMT
Vary: *
Date: Fri, 01 Jul 2011 10:17:20 GMT
Content-Length: 66815
(payload = some stale data)

再一次,您会注意到它在之后 Expires.

那么:这里可能出了什么问题?

附加;当我们使用自定义选项时,我们的 GetVaryByCustomString() 正确调用 base.GetVaryByCustomString(ctx, custom) 以获取它无法识别的选项,就像 MSDN 一样(实际上这对于上面的第二个示例来说很好)。

【问题讨论】:

  • Marc 你的自定义输出缓存提供程序不会碰巧在某个地方开源吧?
  • @runxc1 我必须检查一下,但我们默认的“转到”工具是红色的,它是通过使用一些自定义包装器(不是)的 bookleeve(两者都是开源的)。但是,我认为这里的 redis 听起来是错误的——我得看看代码。
  • 您找到自定义输出缓存提供程序了吗?只是好奇,因为感觉烤出来的真的很缺乏。

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


【解决方案1】:

您是否有机会使用自定义输出缓存提供程序? 假设,如果有一个自定义提供程序使用滑动过期而不是绝对过期,你会看到这样的症状。

【讨论】:

  • 是的;原来我们很烂
  • Jeff 解雇你,因为你今天没能少吸一点 ;))
  • 嗯,至少我们没有弄乱时间单位;这尴尬
  • 缓存被高估了,你的网站应该足够快,不需要它。
  • @hofnarwillie 哦,我不知道,我认为 Stack Overflow 的表现还不错 :) 此外,他在开玩笑 - 观看我们在 MIX 2011 上的第 9 频道广告以获得参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多