thinkphp多模块缓存需按模块路径精准清理:启用app_multi时缓存位于runtime/【模块名】/cache/,否则统一在runtime/cache/;可用命令行或cache::clear()按路径清除,标签缓存需按模块标签逐个清理。

ThinkPHP多模块项目中,各模块缓存分散在不同runtime子目录下,手动逐个清理极易遗漏或误删;必须按模块路径结构精准定位cache/子目录,再统一执行清除操作。
确认多模块缓存实际存放路径
打开项目根目录下的config/cache.php,找到default配置项,确认当前使用的缓存驱动是否为file;若为redis/memcached等,则此方法不适用,需跳转至Redis清理章节。
检查APP_MULTI(多应用开关)是否为true;若启用多应用模式,缓存路径格式为runtime/【模块名】/cache/,例如admin模块对应runtime/admin/cache/,api模块对应runtime/api/cache/。
若项目未开启APP_MULTI但存在多个模块(如app/index、app/admin),则仍使用单应用路径runtime/cache/,此时无需按模块区分——【切勿误判为多应用而删除runtime/admin/cache/等不存在的路径】。
命令行批量清除所有模块的cache子目录
进入项目根目录,执行以下命令:
Linux/macOS:rm -rf runtime/*/cache/*
Windows(PowerShell):Get-ChildItem -Path "runtime" -Directory | ForEach-Object { Remove-Item "$($_.FullName)\cache\*" -Recurse -Force }
该命令仅匹配runtime/一级子目录下的cache/内容,不会触碰log/、temp/、route.php等关键文件——【严禁执行rm -rf runtime/】,否则将导致路由失效、模板编译失败、日志丢失。
代码中调用Cache::clear()并指定模块存储
方法一:遍历已注册模块,逐个清除其file缓存实例
在命令行类或控制器中写入:
use think\facade\Cache;
$modules = ['index', 'admin', 'api']; // 替换为你的实际模块名
foreach ($modules as $module) {
Cache::store('file')->setOptions(['path' => RUNTIME_PATH . $module . DS . 'cache' . DS])->clear();
}
方法二:直接清空默认file驱动,适用于所有模块共用同一缓存路径的情况
Cache::store('file')->clear();
注意:此方式仅清runtime/cache/下的内容,对runtime/admin/cache/等路径无效;务必先确认模块缓存是否真的分目录存储。
强制清除含标签的跨模块缓存
第一步:确认哪些缓存键使用了模块相关标签,例如Cache::tag('admin_user')->set('info', $data)或Cache::tag(['user', 'admin'])->set(...)
第二步:按标签逐个清除,避免影响其他模块
Cache::tag('admin_user')->clear();
Cache::tag('api_token')->clear();
第三步:若标签命名无模块前缀(如统一用'token'),且需全量清除,则必须先评估影响范围——【一旦执行Cache::tag('token')->clear(),所有模块打该标签的缓存将同时失效】。
验证清除结果是否生效
① 查看各模块runtime目录下cache/子目录是否为空:runtime/index/cache/、runtime/admin/cache/、runtime/api/cache/
② 访问各模块首页,观察首次加载是否触发缓存重建(如页面响应时间明显变长、日志中出现cache write记录)
③ 若某模块仍返回旧数据,立即检查该模块是否配置了独立缓存驱动(如单独指定了redis连接池),此时需跳转至对应驱动清理流程
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











