1

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

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

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

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

我在 Ubuntu 12.04 和 nginx 上。

谢谢!

4

1 回答 1

3

您想使用边缘侧包含. 基本上,您的页面使用这样的 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:includeURL 的内容替换每个/path/to/article/1。您可以将页面本身缓存几分钟,并将每篇文章缓存几天。

于 2014-05-15T11:46:25.083 回答