ThinkPHP6新手清理缓存常因误用命令导致模板不更新、路由404等:php think clear默认仅清cache/、log/、session/、trace/,不删temp/模板编译文件和data/route.php;加-t清模板,用--all会误删config/致启动失败;Cache::clear()需指定store且确认驱动为file;Redis缓存须用php think cache:clear --type=redis。

ThinkPHP6新手第一次清理缓存时,常因不了解runtime目录分层逻辑、缓存驱动差异和命令参数含义,导致模板不更新、路由404、数据库配置丢失或Redis误清空——这些不是缓存没清掉,而是清错了位置或清过了头。
以为php think clear就清完了,结果模板还是旧的
执行php think clear后刷新页面,模板内容没变,还以为命令失效。其实它默认只删runtime/cache/、log/、session/、trace/四个目录,【模板编译文件在runtime/temp/下,路由缓存在runtime/data/route.php里,这两处完全不动】。
确认是否真清了模板:进项目根目录,运行ls runtime/temp/,如果看到一堆*_index.html.php文件,说明模板缓存根本没动。
正确做法是加-t参数:php think clear -t,它会清runtime/view/(TP6原生模板引擎)和runtime/temp/里的编译文件。
立即学习“PHP免费学习笔记(深入)”;
注意:如果你用的是Smarty或自定义模板引擎,-t对它们无效,得手动删对应目录。
直接php think clear --all,首页突然404
这是新手最常踩的坑:一着急就上--all,结果runtime/config/被连带清空,框架启动时读不到数据库host、app_debug等关键配置,报错“Class not found”或首页空白。
第一步:立刻检查runtime/config/目录是否存在,里面有没有database.php、app.php等文件。
第二步:如果没了,别慌——这些配置文件是首次请求时自动生成的。但生成前需确保config/源目录下的原始配置文件完好,且runtime/目录有写权限。
第三步:临时恢复访问,执行php think optimize:config强制重载配置缓存;再跑php think optimize:route重建路由。这比暴力清空稳得多。
【下次清理前,先用php think clear -f(仅清文件缓存)代替--all,避开config和route】。
Cache::clear()在控制器里写了却没反应
在控制器方法里写Cache::clear(),返回true,但runtime/cache/里的文件还在。问题出在缓存驱动配置和路径映射上。
方法一:确认当前用的是file驱动。打开config/cache.php,看'default' => 'file'是否生效,且'stores.file.path'指向的确实是runtime/cache/。
方法二:显式指定store,避免依赖默认配置:Cache::store('file')->clear()。如果配置里改过path,比如设成了/var/tmp/tp_cache,那Cache::clear()仍会去删runtime/cache/,根本不对路。
方法三:验证是否真删了——别信返回值,直接var_dump(file_exists(runtime_path('cache/xxx.php')))查具体文件。
redis缓存怎么清?删了文件缓存发现用户token还在
你清了runtime/cache/,但用户登录态(token)依然有效,因为token走的是Redis,不是文件。
第一步:确认缓存驱动是redis。查config/cache.php中'default' => 'redis',且'stores.redis.type' => 'redis'已配置。
第二步:执行命令行清理:php think cache:clear --type=redis。TP6.0+支持该指令,它会调用Redis驱动自身的清理逻辑,比如发FLUSHDB(不是删本地文件)。
第三步:如果用了多实例(比如Cache::store('token_redis')),必须指定store名:php think cache:clear --type=redis --store=token_redis。
⚠️ 注意:FLUSHDB会清空当前Redis数据库所有key,如果其他业务共用同一DB,会误伤。生产环境优先用--except=redis跳过Redis,或改用前缀隔离+按tag清理。
想按标签清缓存,Cache::tag('user')->clear()报错
写了Cache::tag('user')->clear(),却提示Call to undefined method,是因为只有file和redis驱动支持tag,而你的配置可能还是apc或xcache。
第一步:检查config/cache.php,确认'default'驱动是file或redis,不是apc或xcache——后两者根本不支持tag功能。
第二步:确保缓存写入时用了tag。比如Cache::tag('user')->set('profile_1001', $data, 3600),而不是Cache::set()裸调用。
第三步:清除时,tag名必须完全一致,区分大小写。如果写入用的是Cache::tag(['user', 'v2']),清除时用Cache::tag('user')->clear()或Cache::tag('v2')->clear()都能生效。



















