ThinkPHP5.0.24无“控制器缓存”概念,实为模板编译缓存、路由请求缓存及业务数据缓存三者的混淆;需分别配置tpl_cache、Route::cache()及Cache::get/set,并关闭app_debug。

ThinkPHP5.0.24 本身不提供“控制器缓存”这一独立概念,框架中没有 controller_cache 这类配置项。所谓“控制器缓存”,通常是对以下三种机制的误称或混淆:
- ✅ 模板编译缓存(tpl_cache):缓存模板解析后的 PHP 文件,提升视图渲染速度;
- ✅ 请求缓存(route cache):对某条路由的完整响应(HTML)做静态化缓存;
- ✅ 数据/业务缓存(Cache类):在控制器逻辑中手动缓存查询结果、计算结果等。
下面按实际可操作、有明确效果的方式说明如何开启和配置:
启用模板编译缓存(最常用、必开)
这是影响页面加载速度最直接的一环。默认关闭,需手动开启:
- 打开 application/config.php(TP5.0)或 application/config/template.php(TP5.1+)
- 在
'template' => [ ]数组中添加:
'tpl_cache' => true,
'tpl_cache_time' => 3600, // 可选:1小时后自动检查更新
```
- 确保
runtime/temp/目录可写(Linux 下常需chmod -R 755 runtime)
为特定路由开启请求缓存(类似“页面级缓存”)
在 route/route.php 中配置,适用于内容变动少的控制器动作:
立即学习“PHP免费学习笔记(深入)”;
- 例如缓存商品详情页(仅按
id区分):
Route::get('product/:id', 'index/product/detail')
->cache([
'expire' => 7200,
'params' => ['id'],
'prefix' => 'prod_'
]);
```
- 缓存文件生成在
runtime/request_cache/,无需修改控制器代码 - 注意:不要对含分页、排序、用户态参数的路由全量缓存,否则易导致缓存爆炸或内容错乱
在控制器中手动使用 Cache 缓存业务数据
这不是“缓存控制器”,而是缓存其执行结果。适合高频但低频更新的数据:
- 在控制器方法内加入:
use think\facade\Cache;
$data = Cache::get('hot_products');
if ($data === null) {
$data = ProductModel::where('is_hot', 1)->limit(10)->select();
Cache::set('hot_products', $data, 3600);
}
return view('index', ['list' => $data]);
```
- 推荐搭配缓存前缀(如
config/cache.php中设'prefix' => 'tp5_')避免键冲突 - 生产环境建议切换为 Redis 驱动,性能远优于 file
补充:必须关闭调试模式
若 'app_debug' => true,所有缓存(包括模板缓存)都会被绕过:
- 务必在 application/config.php 中设为:
'app_debug' => false,
```
- 同时建议执行命令预生成各类缓存(部署时运行一次):
php think optimize:config
php think optimize:route
php think optimize:schema
php think optimize:autoload
```



















