Symfony2 Gateway Cache是​​否支持“stale-while-revalidate”扩展?

时间:2014-03-31 13:32:37

标签: php symfony caching

Symfony2 docs中有对stale-while-revalidate的引用:

// app/AppCache.php
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;

class AppCache extends HttpCache
{
    protected function getOptions()
    {
        return array(
            'debug'                  => false,
            'default_ttl'            => 0,
            'private_headers'        => array('Authorization', 'Cookie'),
            'allow_reload'           => false,
            'allow_revalidate'       => false,
            'stale_while_revalidate' => 2,
            'stale_if_error'         => 60,
        );
    }
}

但是,我无法使用Symfony2网关缓存实现以下行为(described here):

enter image description here


我使用了很多默认配置。我收到了以下回复:

首次请求时,响应来自服务器(耗时300毫秒)。

Age:0
Cache-Control:public, s-maxage=20
X-Symfony-Cache:GET /api/boards/kQVhc2uJ: miss, store

第二次请求时,响应来自网关缓存(耗时30ms)。

Age:4
Cache-Control:public, s-maxage=20
X-Symfony-Cache:GET /api/boards/kQVhc2uJ: fresh

在第三次请求时,响应来自服务器(耗时300ms)。

Age:0
Cache-Control:public, s-maxage=20
X-Symfony-Cache:GET /api/boards/kQVhc2uJ: stale, invalid, store

我希望从网关缓存和网关缓存返回第三个请求,以便对服务器进行异步调用以重新验证缓存。相反,我直接调用服务器通过网关缓存。

Symfony2网关缓存是否支持" state-while-revalidate"延期?或者它只适用于Squid或Varnish?

1 个答案:

答案 0 :(得分:0)

答案是部分。来自Github issue的@jakzal评论:

  

@websirnik不会与HttpCache进行异步调用。如果之前存储的响应不再新鲜,则第一个请求将生成新的响应。如果在此期间有任何其他请求,他们将收到陈旧的回复。

     

HttpCache是​​一个简单的反向代理,它不打算替换清漆或鱿鱼。