thinkphp 5.0 静态缓存需按规则精准清理:请求缓存存于 runtime/request_cache/,html 缓存存于 runtime/html/;应设生命周期(如 cache(3600)、html_cache_time=1800),并用轻量命令按修改时间清理过期 .html 文件,避免全盘扫描或误清系统缓存。

ThinkPHP 5.0 的静态缓存(主要是请求缓存和 HTML 缓存)默认会生成大量 .html 文件,存放在 runtime/request_cache/ 或自定义的 HTML 缓存目录中。如果长期不清理,不仅占用磁盘空间,还可能因缓存过期失效、路径冲突或命中率下降而影响性能。自动清理的关键不是“定时删所有”,而是按规则精准清理 + 系统化触发。
静态缓存文件实际存放位置要确认清楚
TP5.0 的静态缓存分两类,路径不同:
-
请求缓存(Route Cache):默认在
runtime/request_cache/,由路由->cache()触发生成,文件名含 md5 路由标识; -
HTML 页面缓存(HtmlCache):由
html_cache_on => true开启,文件落在runtime/html/(需在config.php中配置html_cache_path,否则用默认值);
别混淆runtime/cache/(普通数据缓存)和runtime/temp/(模板编译缓存),它们的清理逻辑不同。
给静态缓存加生命周期控制,从源头减少冗余
光靠“事后清理”治标不治本。建议在启用缓存时就绑定有效期和标识规则:
- 路由级缓存强制设过期时间:
Route::get('article/:id', 'index/article/read') ->cache(3600); // 1小时后自动失效,下次访问重建 - HTML 缓存配置中启用时间限制:
'html_cache_time' => 1800, // 单页缓存30分钟 'html_cache_rules' => [ 'Article:' => ['{:module}/{:controller}/{:action}_{id}', 1800], ],这样系统会在读取缓存前检查文件修改时间,超时即跳过并重建,无需手动干预。
写一个轻量级自动清理命令(推荐放后台或定时任务)
新建一个控制器方法,例如 app\command\CacheClean.php(或直接在已有管理控制器中添加):
public function clearOldHtmlCache()
{
$htmlPath = RUNTIME_PATH . 'html/';
if (!is_dir($htmlPath)) return;
$files = glob($htmlPath . '*.html');
$now = time();
foreach ($files as $file) {
if (is_file($file) && ($now - filemtime($file)) > 86400) { // 超24小时
@unlink($file);
}
}
echo "已清理过期HTML缓存文件:" . (count($files) - count(glob($htmlPath . '*.html'))) . " 个\n";
}
再配合 Linux crontab 每天凌晨执行:
0 3 * * * /usr/bin/php /var/www/your-project/public/index.php command/cache_clean
Windows 可用计划任务调用 php public\index.php command\cache_clean。
配合缓存标签做定向清除,避免全盘扫描
如果你用的是 Cache::tag() 或自定义缓存标识(如 'tag'=>'article_list'),可直接按标签清理:
Cache::tag('article_list')->clear(); // 只清带该标签的所有缓存项
这对 HTML 缓存不直接生效,但可用于配套的数据缓存(如列表查询结果),间接让页面缓存因数据缺失而自然重建,比硬删更安全。
注意:不要用 Cache::clear() 清理整个缓存驱动,它会连 session、配置等一并清掉,影响线上稳定性。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











