问题:我可以在 Varnish 中完成这个吗?

我有一个网站,它通过来自许多不同网站的 RSS 提要获取新闻文章。该脚本将这些文章添加到 mysql 数据库中。我在许多页面上向查看者显示每页 10 篇文章。

目前,每次更新脚本将新文章添加到数据库时,我都会缓存整个页面并清除缓存。它速度很快,但效率不高。缓存的页面只有几分钟的生命周期,尽管文章本身可以缓存更长的时间。

我可以使用 varnish 将单个文章存储在缓存中吗?因此,生成的每个页面都会有文章的链接/指针/引用,而不是文章本身。然后,我可以将这些页面缓存一小段时间,同时将文章缓存更长时间。

我将如何在 Varnish 或任何其他缓存机制上执行此操作?这会在缓存命中时执行更差/相同的全页缓存吗?

我在 Ubuntu 12.04 和 nginx 上。

谢谢!

解答

您想使用边缘边包括。基本上,您的页面使用这样的 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;
}

或在清漆 4 中:

sub vcl_backend_response {
  set beresp.do_esi = true;
}

当上面的代码通过 Varnish 时,Varnish 会将每个esi:include替换为 URL/path/to/article/1的内容。您可以将页面本身缓存几分钟,并将每篇文章缓存几天。

Logo

开发云社区提供前沿行业资讯和优质的学习知识,同时提供优质稳定、价格优惠的云主机、数据库、网络、云储存等云服务产品

更多推荐