缓存清理后网站变慢的根源是多层缓存缺失导致耗时操作暴露:1. 模板缓存未启用致重复编译;2. 字段缓存丢失引发频繁 SHOW COLUMNS;3. APCu/Redis 缓存异常退化为查库;4. 路由与配置缓存未重建致动态解析开销增大。

缓存清理后网站变慢,不是缓存“没了”导致的,而是缓存失效后,原本被缓存兜底的耗时操作(如数据库查询、模板编译、字段探测)重新暴露出来。关键要定位哪一层缓存缺失引发了性能回退。
检查模板缓存是否真正启用
ThinkPHP 5.1 默认不开启模板缓存,清空 runtime/ 后若未显式配置,每次请求都会重新解析和编译模板(如 {volist}、{$var}),CPU 占用飙升。
- 确认 config/template.php 中 'tpl_cache' => true 已设置
- 确保 runtime/temp/ 目录可写,且首次访问后该目录下生成了 .php 编译文件(如 index@html.php)
- 关闭调试模式:'app_debug' => false,否则 tpl_cache 会被强制忽略
验证字段缓存是否缺失
清空 runtime/ 会删除 schema 缓存,导致每个数据库查询前都执行 SHOW COLUMNS FROM table_name —— 一个页面可能触发 5–10 次,严重拖慢响应。
- 开发环境运行:
php think optimize:schema,生成 runtime/schema/ 下的表结构缓存文件 - 将整个 runtime/schema 目录同步到生产环境(无需执行命令,只要文件存在即可生效)
- 若无法部署新文件,可临时在数据库配置中加 'fields_cache' => true(部分版本支持,非官方标准,需实测)
确认 APCu 或 Redis 缓存是否正常工作
如果项目依赖 APCu 缓存热点配置(如用户开关、字典数据),清理 runtime/ 不影响它,但若 APCu 扩展未启用或配置错误,就会退化为全量查库。
立即学习“PHP免费学习笔记(深入)”;
- 执行
php -m | grep apcu,确认扩展已加载;若无输出,检查 apcu.ini 是否启用且 apcu.enable_cli=0(避免 CLI 环境干扰) - 检查 config/cache.php 中 APCu store 配置是否完整,prefix 必须显式指定,否则多模块 key 冲突导致命中失败
- 用
\think\Cache::store('apcu')->set('test', 'ok');+get('test')快速验证读写是否正常
排查路由与配置缓存是否重建
清空 runtime/ 后,若未重新生成 route 和 config 缓存,框架会在每次请求中动态解析全部路由规则、合并多层配置,尤其在路由数量多时明显卡顿。
- 执行
php think optimize:route和php think optimize:config(需有 CLI 权限) - 检查 runtime/cache/ 下是否存在 route.php 和 config.php 编译文件
- 若无执行权限,可将本地生成的这两个文件手动上传覆盖(注意确保配置内容与线上一致)



















