当我在控制器中明确设置TTL
时$response->setMaxAge(60);
$response->setSharedMaxAge(60);
一切正常,我得到了正确的回复标题:
X-Symfony-Cache GET /hello/show/: miss, store
... and then ...
X-Symfony-Cache GET /hello/show/: stale, invalid, store
... and then ...
X-Symfony-Cache GET /hello/show/: fresh
但是当我没有在控制器中明确设置TTL并想要使用默认的TTL设置时:
class AppCache extends HttpCache {
protected function getOptions() {
return array(
'debug' => true,
'default_ttl' => 60,
'private_headers' => array('Authorization', 'Cookie'),
'allow_reload' => false,
'allow_revalidate' => false,
'stale_while_revalidate' => 2,
'stale_if_error' => 60,
);
}
}
我总是得到一个"想念"。
X-Symfony-Cache GET /hello/show/: miss
看起来Symfony没有考虑default_ttl设置。为什么呢?
答案 0 :(得分:2)
我找到了原因。这是由于私人/公众的反应。文档说明:
公开与私人回应¶
网关和代理缓存都被视为“共享”缓存 缓存的内容由多个用户共享。如果是用户特定的 响应被错误地存储在共享缓存中,它可能是 稍后返回给任意数量的不同用户。想象一下,如果你的 帐户信息被缓存,然后返回到每个后续 要求提供帐户页面的用户!
要处理这种情况,可以将每个响应设置为公开或 私人:
public: Indicates that the response may be cached by both private and shared caches; private: Indicates that all or part of the response message is intended for a single user and must not be cached by a shared cache.
Symfony保守地默认每个响应都是私有的。采取 共享缓存的优点(如Symfony2反向代理), 响应需要明确设置为公开
因此,为了使Symfony使用default_ttl设置,您必须明确将Response设置为公共,如下所示:
$response->setPublic();