ThinkPHP6清缓存无反应的根源是缓存驱动未正确启用或配置路径失效:Redis驱动未安装、store配置不匹配、runtime/cache目录权限不足、path路径非法、OPcache未刷新等均会导致Cache::clear()静默失败。

ThinkPHP6后台操作清缓存没反应,不是代码写错了,而是缓存驱动未正确启用或配置路径失效——比如config/cache.php里设了'redis'但没装think-redis扩展,或runtime/cache目录权限为只读,导致Cache::clear()静默失败,返回true却什么都没删。
先确认缓存驱动是否真正加载
打开config/cache.php,检查'default'值是否与'stores'中已定义的store名完全一致,例如:【'default' => 'redis'】,但'stores'下没有'redis'键,或拼写为'redis_cache',就会fallback到file驱动且不报错。
执行php think clear后立刻运行php think status,观察输出中的cache部分是否显示driver=redis;若仍显示file,说明配置未生效。
在控制器中临时加一行:var_dump(Cache::getStore());,输出对象类名应为think\cache\driver\Redis,而非File——否则就是驱动注册失败。
立即学习“PHP免费学习笔记(深入)”;
检查 runtime/cache 目录权限和路径配置
Linux/macOS下执行ls -ld runtime/cache,确认PHP运行用户(如www-data或nginx)对该目录有rwx权限;Windows下需右键属性→安全→编辑→添加IIS_IUSRS或对应用户并勾选“修改”。
若config/cache.php中自定义了path参数,请确认它是绝对路径(如'/var/www/myapp/runtime/cache')或相对于项目根目录的合法相对路径(如'../data/cache'),不能是'./runtime/cache'或'runtime/cache/'(末尾斜杠会导致file_exists()判断失败)。
这一步操作起来很简单,直接把文件拖进去就行。
验证清除动作是否真实发生
方法一:用Cache门面强制走file驱动并验证
Cache::store('file')->set('test_clear', 'alive', 60);
Cache::store('file')->clear();
var_dump(Cache::store('file')->get('test_clear')); // 应输出bool(false)
方法二:手动检查文件系统
执行clear前,进入runtime/cache/目录,运行ls -1 | head -n3,记下几个文件名;执行Cache::clear()后再次ls -1,若列表几乎不变,说明删除未执行——大概率是目录权限不足或path配置指向了错误位置。
注意:某些共享主机禁用unlink()函数,此时clear()返回true但实际无操作,需联系服务商开启或换用Redis驱动。
排除OPcache干扰
第一步:确认PHP OPcache是否启用且校验时间戳关闭
在phpinfo()页面搜索opcache.validate_timestamps,若值为0,则即使你改了config/cache.php,OPcache仍会缓存旧的配置文件内容。
第二步:临时加强制刷新逻辑
在AppServiceProviders中boot()方法开头插入:if (function_exists('opcache_invalidate')) { opcache_invalidate(CONFIG_PATH . '/cache.php', true); },CONFIG_PATH需替换为实际配置目录常量。
第三步:重启PHP-FPM或Apache,避免字节码层缓存掩盖配置问题。



















