4

启用缓存会影响动态内容吗?

例如,在我的一个 PHP 站点上,缓存标头设置为:

Cache-Control: public, max-age=21600

这也会影响动态内容吗?

如果是这样,那么缓存动态 PHP 站点的标准方法是什么?据推测,您将缓存静态内容(例如图像),而不是动态内容(例如 html、文本等)。你将如何以及在哪里实现这一目标?

4

2 回答 2

3

是的。答案是肯定的。这控制浏览器和一些 ISP 缓存。它将在您在许多位置指定的时间缓存动态内容。不是全部。并非所有浏览器都会遵守规则,并非所有 ISP 都会遵守规则。众所周知,AOL 过去常常无视人们的缓存规则,并将所有内容缓存到奇怪的时期,从而导致早期网络上的页面损坏。

在未缓存的动态页面上,您可以使用此值将更改相对不频繁的页面设置为缓存 10 分钟到一个小时。对于图像、css、js 文件和更长时间的东西。缓存 8 小时可能太多了,因为它比 1 小时长得多,但只会将内容的总点击次数减少 7。

其他缓存

还有其他可能更可靠的缓存内容的方法。您可以查看查询缓存、文件缓存、memcached。所有这些选项也可用于缓存内容以外的内容。它们都将帮助您加快重复操作。

查询缓存

许多数据库,MySQL 是事实上的标准,都提供查询缓存。这将缓存自上次运行查询以来尚未更新的表上的查询结果。非常适合标准化的查找表。非常适合在蓝月亮中仅更新一次的表格。适用于大约每小时更新一次甚至每 10 分钟更新一次的表格。对于更频繁地更改的表格,它们将产生有限的节省时间的结果。

文件缓存和 Memcached

这些可用于缓存信息的键/值对。它们可以是 page_url/page_content 或 page_list/array_of_pages_in_site 或您需要的任何其他键/值对。这就是现在大多数人将页面缓存 10-60 分钟的方式。它们是可靠的,在服务器上受控,并且可以在需要时立即刷新。它们不需要基于时间,如果您的逻辑编写正确,您可以将它们视为查询缓存。只有当信息更新时,您才会从缓存中刷新该键,然后页面会立即更新,否则会位于缓存中。

标头缓存

这让我们回到了标头缓存。即使在其他缓存到位的情况下,在这里缓存大约 10 分钟仍然是明智的。其他缓存仍然需要服务器的请求,这可能会减慢它的速度。虽然这不会大大减少这种压力,但它会减少它。而且安装起来也不费力。

于 2012-09-25T14:04:53.293 回答
0

这个想法是您的网站由资源[页面、图像、脚本甚至]组成,并且您为每个人提供过期限制,或者使您修改的元素的缓存无效[例如,您在主页上添加了新帖子,或者您编辑条目]。

一个常见的解决方案是使用像Varnish这样的反向代理,它会非常快速地向客户端提供缓存的内容,并且如果缓存标头在您的内容中发生更改,它将寻找更新的版本。

缓存头生成器过程由您决定 -您可以在此处找到一些想法

于 2012-09-25T13:01:23.077 回答