昨天我同事把线上环境搞崩了。理缓他在后台点了个按钮,理缓然后整个网站白屏,理缓所有接口报500。理缓原因很简单——他执行了 php artisan cache:clear,理缓但没意识到这个命令会把所有缓存都清掉,理缓包括那些用来存储配置、理缓路由、理缓权限的理缓缓存。线上几百个请求同时打过来,理缓系统瞬间失去了所有缓存支持,理缓数据库连接数直接爆掉。理缓
Laravel的理缓缓存系统其实是个好东西,但它有个坑:缓存命令太多太像了。理缓新手容易混淆,理缓老手也经常记错。我见过有人用 php artisan config:cache 来清缓存,结果把配置又缓存了一遍,改了环境变量死活不生效,排查了俩小时。
咱们先理清楚。Laravel的缓存分好几层:配置缓存、路由缓存、视图缓存、应用缓存,还有各种driver(file、redis、memcached)存的数据。你执行 php artisan cache:clear,它清的是应用缓存,就是你在代码里用 Cache::put() 存的那部分。它不会动配置缓存,也不会动路由缓存。
所以真正要清理完整,你得按顺序跑这几条命令:
php artisan config:clear php artisan route:clear php artisan view:clear php artisan cache:clear php artisan clear-compiled 每条命令干的活不一样。config:clear 是删除 bootstrap/cache/config.php 这个文件,route:clear 是删路由缓存文件,view:clear 清的是编译过的Blade模板,clear-compiled 删的是编译过的服务提供者。少一条都不行。
有个细节很多人不知道。php artisan config:cache 和 php artisan config:clear 是一对,前者把配置合并成一个文件存起来,加速加载,后者删掉那个文件。如果你改了 .env 文件,必须执行 php artisan config:clear 或者 php artisan config:cache 重新生成,否则新配置不会生效。这个坑我踩过不止一次,每次改完 .env 忘了清缓存,然后一脸懵地看着代码里读到的还是旧值。
再提一个容易被忽略的:php artisan optimize。这条命令会把配置、路由、事件监听器一次性全部缓存,适合生产环境部署。但代价是,你每次改代码后都得重新跑一遍,否则改动不生效。很多人部署完代码忘了跑这个,结果线上跑的还是老代码。
我建议你把常用的清理命令写成一个小脚本,比如 clear.sh,放在项目根目录。每次部署完直接执行 sh clear.sh,省得一条条敲。别嫌麻烦,等你线上出问题的时候,能少敲几行命令就是救命。
最后说个真实案例。有次我接手一个老项目,发现 bootstrap/cache 目录下堆了一堆 .php 文件,有些还是几个月前的。我跑了一遍清理命令,网站速度反而变快了。后来查代码,发现有个服务提供者写得很烂,每次请求都去读配置文件,之前被缓存掩盖了问题。清了缓存,问题暴露出来,改掉之后性能提升明显。所以说,清理缓存不只是运维操作,有时候还能帮你发现代码里的隐藏问题。
记住,Laravel的缓存命令不是为了让你每次部署后跑一遍就完事的。你得知道每条命令清理的是什么,什么时候该用,什么时候不该用。别像我那个同事一样,一把梭哈把生产环境搞挂了。

喜欢
讨厌