清缓存前必须确认的三件事:一、确认当前缓存驱动类型(file/redis/memcached);二、检查php进程是否正占用runtime/cache文件(用lsof +d runtime/);三、确保非高峰期操作,避免强制删除导致opcache校验失败或路由中断。

清缓存前必须确认的三件事
在ThinkPHP项目上线后,修改配置或更新模板却看不到效果,八成是缓存没清干净——但直接删runtime目录可能让刚上线的订单系统瞬间报错,因为部分缓存文件被PHP进程独占锁定,强制删除会触发opcache校验失败或路由加载中断。
第一步:确认当前缓存驱动类型。打开config/cache.php,查看'default'值是'file'、'redis'还是'memcached'。若为file,后续操作才涉及runtime目录;若为redis,删本地文件毫无意义。
第二步:检查PHP进程是否正在写入缓存。执行lsof +D runtime/,若输出中包含php-fpm或nginx进程占用runtime/cache/下的文件,说明有请求正往里写数据,此时直接rm -rf会破坏缓存一致性。
【切勿在Web请求高峰期执行清缓存操作】 否则可能导致大量用户看到500错误页面,尤其当使用了HTML_CACHE_ON静态缓存时,页面生成失败会直接返回空内容。
Linux服务器上安全清文件缓存
方法一:用ThinkPHP内置命令(推荐)
进入项目根目录,执行:php think clear:cache。该命令会自动跳过被占用的缓存文件,只清理可安全删除的项,并重置opcache。
方法二:手动清理runtime子目录(仅限离线维护)
① 停止PHP-FPM服务:sudo systemctl stop php-fpm
② 删除缓存主目录:rm -rf runtime/cache/ runtime/log/ runtime/temp/
③ 重启服务:sudo systemctl start php-fpm。这一步不能省,否则新请求仍会读取旧opcache字节码。
注意:不要删除runtime/整个目录,里面route和app子目录存储着已编译路由和应用状态,删掉会导致首次访问变慢且可能路由失效。
Redis缓存环境必须执行的两步
Redis缓存不会受runtime目录影响,但ThinkPHP默认使用数据库名+前缀拼接key,不同环境若共用同一Redis实例,开发机清缓存会误删生产数据。
第一步:确认Redis连接配置。检查config/cache.php中stores.redis.prefix是否带环境标识,例如'prod_'或'dev_'。若为空或为'think_'这类通用前缀,必须先改配置再清。
第二步:按前缀精准清理。登录Redis服务器,执行:redis-cli -n 0 --scan --pattern "prod_*" | xargs redis-cli -n 0 del。这里-n 0要替换成你实际使用的数据库编号,prod_*要替换成你配置的prefix值。
宝塔面板用户特别注意事项
宝塔默认将网站根目录设为/www/wwwroot/your-site/,但ThinkPHP要求Web入口必须指向public/子目录。如果清缓存后页面白屏,大概率是因为你在宝塔后台点了“清除PHP缓存”,结果把opcache全清了,而public/index.php又因路径错位找不到vendor/autoload.php,最终报Class not found。
正确做法:在宝塔「网站」→「设置」→「网站目录」中,把「运行目录」改为/public,再回到「PHP设置」→「禁用函数」列表里确认clearstatcache未被禁用——这个函数被禁用会导致ThinkPHP无法检测缓存文件更新时间,清完也无效。
这一步操作起来很简单,直接在宝塔界面点选即可,无需SSH命令。
Windows IIS环境下最易忽略的坑
IIS的FastCGI进程池默认启用“快速回收”,每29分钟自动重启php-cgi.exe。若你刚执行完php think clear:cache,10秒后进程重启,opcache又从磁盘重新加载旧缓存,导致清缓存像打地鼠。
解决方法:进IIS管理器→「FastCGI设置」→双击你的PHP版本→把「活动超时(秒)」从30改成0(禁用自动回收),再勾选「监视应用程序池以确保其正常运行」。改完必须点击「应用」,否则配置不生效。
【改完FastCGI设置后必须手动回收一次应用程序池】 否则旧进程还在跑,新配置形同虚设。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











