1

我们目前正在编写一个 Varnish 实现,看看它是否适合放在我们的 Rails 应用程序前面。

我们希望 Varnish 缓存 API 调用的结果,并且仅在客户端的 ETag 与 Varnish 中存储的不匹配或客户端的修改日期早于 Varnish 的日期时才访问应用程序。

到目前为止,我还没有看到 Varnish 将这些值考虑在内。

当辅助请求在最大期限内时,我们只会获得缓存命中。

这是预期的行为吗?

4

2 回答 2

0

这是预期的行为,Varnish 当前不会重新验证缓存的内容。

有一些实验性的工作可以做你想做的事,这可能会也可能不会在 Varnish 4.0 中结束(几个月后)。

与此同时,您可以做的是人为设置一个较短的 TTL,并设置一个grace与您想要的 TTL 相等的时间。使用该配置,当请求进入 Varnish 时,会向后端发送一个 IMS 请求(当然,只要缓存的条目有一个 ETag,否则它将是一个普通请求)。

副作用是,如果后端关闭或返回 500,Varnish 也会发送缓存条目——这可能是也可能不是你想要的。

于 2012-11-26T13:58:14.990 回答
0

我所做的是将 hash() 函数设置为使用提供的 etag。

这意味着对对象的第一个请求(客户端未提供 etag)将获取对象本身。

任何后续请求,或任何为 etag 提供标头的请求,都将获得一个对象或 304。

于 2015-07-21T17:01:57.423 回答