【问题标题】:Does Symfony2 Gateway Cache support "stale-while-revalidate" extension?Symfony2 网关缓存是否支持“stale-while-revalidate”扩展?
【发布时间】:2014-03-31 13:32:36
【问题描述】:

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):


我使用的几乎都是默认配置。我收到以下回复:

在第一次请求时,来自服务器的响应(耗时 300 毫秒)。

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

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

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

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

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

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

Symfony2 网关缓存是否支持“state-while-revalidate”扩展?还是只对 Squid 或 Varnish 有用?

【问题讨论】:

标签: php symfony caching


【解决方案1】:

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

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

HttpCache 是一个简单的反向代理,它并不打算替换 varnish 或 squid。

【讨论】:

    猜你喜欢
    • 2018-06-15
    • 1970-01-01
    • 2020-06-01
    • 2017-02-28
    • 2014-10-13
    • 2019-04-08
    • 2020-02-12
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多