我有一个网站,通过来自许多不同网站的RSS源提取新闻文章。该脚本将这些文章添加到mysql数据库中。我在很多页面上向观众展示了10篇文章。
目前,每次更新脚本向数据库添加新文章时,我都会缓存整个页面并清除缓存。它速度快但效率不高。缓存的页面只有几分钟的生命周期,即使文章本身可以缓存更长时间。
我可以使用varnish将各个文章存储在缓存中吗?因此,生成的每个页面都会有文章的链接/指针/引用,而不是文章本身。然后,我可以在短时间内缓存这些页面,同时将文章缓存更长时间。
我如何在Varnish或任何其他缓存机制上执行此操作?这会比缓存命中的整页缓存更糟/更差吗?
我在Ubuntu 12.04和nginx上。
谢谢!
答案 0 :(得分:3)
您想使用edge side includes。基本上,您的页面使用ESI链接:
<div class="articles">
<esi:include src="/path/to/article/1"/>
<esi:include src="/path/to/article/2"/>
<esi:include src="/path/to/article/3"/>
</div>
现在在Varnish中,有这个:
sub vcl_fetch {
set beresp.do_esi = true;
}
或在Varnish 4中:
sub vcl_backend_response {
set beresp.do_esi = true;
}
当上述代码通过Varnish时,Varnish会将每个esi:include
替换为网址/path/to/article/1
的内容。您可以将页面本身缓存几分钟,将每篇文章缓存几天。