Symfony2跳过AppCache中的default_ttl设置

时间:2014-08-02 09:33:39

标签: symfony caching

当我在控制器中明确设置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设置。为什么呢?

1 个答案:

答案 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();