问题 OutputCache提供长期陈旧的数据


我搞砸了......重新 这个 和 这个 “元”问题......

一个非常基本的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 (事实上​​,这适用于上面的第二个例子)。


11961
2017-07-01 09:59


起源

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


答案:


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


10
2017-07-01 11:12



是;事实证明 我们很糟糕 - Marc Gravell♦
杰夫 将 解雇你今天没有少吸吮;)) - Igor Zevaka
好吧,至少我们没有弄乱时间单位;那 将 很尴尬 - Marc Gravell♦
缓存被高估,您的网站应该足够快,不需要它。 - Sam Saffron
@hofnarwillie哦,我不知道,我认为Stack Overflow仍然很好,但是,他还在开玩笑 - 从MIX 2011观看我们的第9频道,以获得参考。 - Nick Craver♦