Laravel 10无自动查询缓存,需手动通过Cache::remember、Eloquent::remember或DB::cache实现;清除时应精准调用Cache::forget(键)或Cache::tags([‘tag’])->flush(),避免误用php artisan cache:clear全量清空。

先确认:你的“查询缓存”存在吗?
如果你没写过类似下面的代码,那根本就没有查询缓存可清:
Cache::remember('users_active', 3600, fn() => User::where('active', 1)->get())User::where('status', 'published')->remember(1800)->get()-
DB::table('stats')->cache(60)->get()(Laravel 10.42+ 支持cache()方法)
怎么精准清除某次查询的缓存?
别用 cache:clear 大扫除——它会连 session、token、临时 token 全干掉。推荐按需清理:
- 删单个键:
Cache::forget('users_active')(PHP 代码中调用) - 删一组键(推荐):写入时打标签,比如
Cache::tags(['user-list'])->remember('all', 3600, ...),清除时用Cache::tags(['user-list'])->flush() - Redis 环境下查键删(慎用):
redis-cli -n 0 KEYS "user:*"→DEL user:all user:recent...(生产环境禁用KEYS,改用SCAN)
为什么 php artisan cache:clear 有时“没效果”?
因为:
- 你清的是缓存驱动里的数据,但代码里可能用了
rememberForever(),它不设 TTL,必须手动forget或flush - 你改了数据库,但缓存键没变、也没主动清除,旧结果还在返回
- 你用的是文件驱动,
cache:clear不删storage/framework/cache/data/下的文件(靠过期自动清理)
开发阶段快速验证和重置
在控制器或 Tinker 中临时执行:
-
Cache::get('your_cache_key')看是否还存在 -
Cache::forget('your_cache_key')立即移除 - 改完数据后,加一行日志或
dd()确认下次请求是否走新查询


















