静态缓存需配置缓存驱动、编写注册PageCache中间件、在路由或控制器中启用三者配合,禁用POST/PUT/DELETE接口缓存,须验证缓存文件生成并建立清理机制。

静态缓存不是开个开关就能用的功能,它需要配置+中间件+合理触发三者配合,否则缓存不会生效,甚至可能引发安全或性能问题。
确认缓存驱动已启用并配置正确
静态页面缓存依赖底层缓存系统,必须先确保文件缓存(或其他驱动)已就绪:
- 检查
config/cache.php中'default' => 'file'是否生效,且'path'指向./runtime/cache/(路径需可写) - 确认
runtime/cache/目录存在、权限为 755 或 777(Linux),Windows 下需确保 IIS/Apache 用户有写入权 - 不要用 Redis/Memcached 替代 file 驱动来实现页面级静态缓存——它们不支持直接缓存完整 HTML 响应体
编写并注册页面缓存中间件
TP5.0.24 不内置页面缓存中间件,需手动创建:
- 在
app/common/middleware/下新建PageCache.php - 核心逻辑是:根据请求路径生成唯一 key → 尝试读取缓存 → 命中则直接返回响应 → 未命中则执行后续逻辑并自动缓存响应内容
- 注意设置合理过期时间(如 60–3600 秒),避免缓存敏感操作(登录态、表单页、用户中心等)
在路由或控制器中启用缓存策略
静态缓存需明确作用范围,不能全局开启:
立即学习“PHP免费学习笔记(深入)”;
- 在
route/route.php中对特定 GET 路由绑定中间件:Route::get('article/:id', 'index/article/read')->middleware('PageCache'); - 或在控制器方法顶部加注解(需开启注解支持):
/** @middleware PageCache */ - 禁止对 POST/PUT/DELETE 接口启用页面缓存,否则会导致表单重复提交或状态错乱
验证与清理机制要同步建立
缓存生效后必须能验证和可控清除:
- 访问目标页面后,检查
runtime/cache/下是否生成对应哈希命名的 PHP 文件(内容为序列化后的 Response 对象) - 添加后台接口(如
/admin/clear-page-cache)调用Cache::tag('page')->clear()或遍历删除指定前缀缓存 - 内容更新时,主动清除关联缓存(例如文章编辑后,删掉
page_article_123等 key)



















