网站缓存是缓存数据还是页面——这话听着像抠字眼,但真到了清完缓存前台还是老样子的时候,答案就决定你往哪个方向去查。我的看法很直接:缓存本质上是数据,只不过它存的内容可以是数据库查询的结果,也可以是一整页渲染好的 HTML。页面缓存只是缓存这个大类里最外面那层皮。你把这两件事当成互不相干的两回事,操作上就很容易只清一半,剩下那一半接着给你添乱。

网站缓存是缓存数据还是页面,两种说法各对一半
从存储这一侧看,缓存就是一块临时存放计算结果的地方。Redis 里躺着序列化后的对象,Memcached 里是键值对,opcache 里是编译好的 PHP 字节码,nginx 的 fastcgi_cache 落盘的是整个响应体文件。这些全是数据,区别只在格式、位置和失效方式。你打开 Redis 客户端扫一眼键名,看到的那一堆字符串,没有任何一个是“页面”。
从浏览器和 CDN 那一侧看,缓存又确实长得像页面。用户访问一个网址,边缘节点把那份 HTML 原样吐出来,后端连请求都没收到。这时候说“缓存的是页面”,也不算错。可这份 HTML 在磁盘上就是一个带 key 的文件,本质还是数据。所以我的解释方式是这样的:缓存是主体,页面缓存是被缓存数据里最容易被误认成“网站本身”的那一层。
在面板上点一下“清缓存”,清掉的到底是哪一层
这就是最容易白折腾的地方。虚拟主机控制面板里那个“清除缓存”按钮,每家服务商实现都不一样。有的只删程序自己的缓存目录,有的顺手 reload 一下 PHP,有的什么也没动只是改了个时间戳。具体以服务商或官方页面说明为准,别默认它帮你把全部清了。
一个带动态程序的站点,同时活着的缓存至少有五层:浏览器本地缓存、CDN 边缘节点、反向代理(nginx 的 fastcgi_cache 或 proxy_cache)、应用层对象缓存(Redis / Memcached),再加上 PHP 的 opcache。你改了一行模板代码,前台没反应,多半不是代码没生效,而是这五层里还有活的。
数据缓存和页面缓存的失效逻辑差得挺远
数据缓存一般是“你要删哪个键就删哪个键”,规则写在业务代码里,比如文章更新完顺手删掉对应前缀的那几个键。麻烦在于它散落在各处,删漏一处,那篇文章的旧摘要就一直在那儿挂着,前台看着就是没更新。
页面缓存靠 TTL 和 purge。TTL 到期自然失效,没到期就只能主动刷。而主动刷得精准命中 URL 和缓存键:带查询参数的、按移动端 UA 分开的、带登录 cookie 的,键一多就容易漏刷。于是经常出现首页更新了、列表页还是老内容这种半新半旧的状态,看着特别像程序出 bug。
改了内容前台没变,按这个顺序往下捋
先开个无痕窗口,或者硬刷新一下,把本地缓存排除掉。这步别嫌土,我见过太多人一上来就重装程序、换主题,最后发现是自己浏览器留着旧页面。
再看 CDN 那边。响应头里的 Cache-Control、Age、X-Cache 这几个字段能看出是命中还是回源,有些控制台支持按 URL 刷新,刷完等一两分钟再验,别刷完立刻下结论。
然后回到服务器这层。先搜一下 nginx 配置里有没有开 fastcgi_cache 一类的指令,确认反向代理缓存的状态。接着看对象缓存,用客户端扫一下对应前缀的键还在不在。最后才轮到 opcache,重启一下 php-fpm 就能排除掉。
这个顺序不是玄学。从离用户最近、动手成本最低的一层往外走,能省下大把瞎折腾的时间,也不至于把好好的配置改坏。
缓存该不该开,看内容多久变一次
内容几乎不动的企业站、文档站,整页缓存开着挺舒服,回源压力小,打开也快,属于划算买卖。反过来,价格库存一直在跳的商城、要实时显示订单状态的后台,整页缓存就是麻烦制造机,宁可只做片段缓存或者纯数据缓存。
还有个折中办法:动态页面把缓存时间设短一些,用短 TTL 换一致性,具体设多少没法给统一答案,得看你的业务能容忍多旧的数据。对象缓存那边也一样,别一上来就把过期时间设到很大,先跑稳了再放宽。
两个坑跟“缓存数据还是页面”直接相关
第一个是整页缓存没区分用户。缓存键里不带 cookie 或者用户 ID,A 用户登录后生成的页面被 B 用户拿到,直接串号。这不是缓存的错,是缓存键设计偷了懒。要整页缓存,就得把身份相关的东西排除在外,或者干脆对登录态不做整页缓存。
第二个是把缓存当备份。有人觉得反正 Redis 里有一份,数据库那边出点问题再捞回来就行。缓存会因为内存淘汰策略随时丢键,它从来不是备份,该做的数据备份一样也不能省。
回到最开始那个问题:网站缓存是缓存数据还是页面,答案偏向前者,页面只是被缓存下来的一种数据形态。真正管用的是脑子里那张分层图——浏览器、CDN、反向代理、对象缓存、opcache,从上往下捋,一层一层排。下次再碰上改了不生效,别急着重装,先问问自己刚才清的到底是哪一层。
【版权声明】:本站内容若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!