使用symfony2 http缓存的dynamics标头缓存策略
我试图使用私有/公共缓存,以避免检索用于构建主页内容的所有数据。这是安静的静态内容 我试着这样做使用symfony2 http缓存的dynamics标头缓存策略,symfony,http-caching,Symfony,Http Caching,我试图使用私有/公共缓存,以避免检索用于构建主页内容的所有数据。这是安静的静态内容 我试着这样做 $response->setMaxAge(600); // mark the response as either public or private $response->setPublic(); $response->setPrivate(); // set the private or shared max age $resp
$response->setMaxAge(600);
// mark the response as either public or private
$response->setPublic();
$response->setPrivate();
// set the private or shared max age
$response->setMaxAge(2000);
$response->setSharedMaxAge(2000);
$response->setETag(md5($response->getContent()));
$response->isNotModified($this->getRequest());
// set a custom Cache-Control directive
$response->headers->addCacheControlDirective('must-revalidate', true);
但是,我有一些小的信息可以动态地改变,比如语言和货币选择
如果用户决定更改语言或货币,如何更改内容
它目前适用于语言,因为URL与home.site/fr或home.site/en不同
但是货币信息不在url中,其他信息如authentified或not也不在url中
那么,如何使用Http缓存并使其符合用户操作的实际情况呢
谢谢你的帮助
Yoni使用HTTP缓存时,您必须将应用程序作为一个整体考虑 根据您的反向代理,默认策略是基于页面的URI缓存页面。ETag用于发出条件请求,以避免从后端获取实际数据,但它不会更改缓存策略的行为 因此,使用您当前的设置,每当用户在定义的2000秒内访问(比如说
example.net/fr
)时,它都会获得从后端检索到的第一个缓存内容,无论他选择的是哪种货币
如果要优化性能,需要减少以删除不太常见的信息
在您的情况下,您可能希望缓存至少2个内容表示:
因此,您基本上有两种解决方案,定义您的自定义策略,在使用Varnish或使用HTTP功能(自定义头+变量)时非常简单。在使用HTTP缓存时,您必须将应用程序作为一个整体来考虑 根据您的反向代理,默认策略是基于页面的URI缓存页面。ETag用于发出条件请求,以避免从后端获取实际数据,但它不会更改缓存策略的行为 因此,使用您当前的设置,每当用户在定义的2000秒内访问(比如说
example.net/fr
)时,它都会获得从后端检索到的第一个缓存内容,无论他选择的是哪种货币
如果要优化性能,需要减少以删除不太常见的信息
在您的情况下,您可能希望缓存至少2个内容表示: