Laravel 11 无自动数据库查询缓存,所谓“数据库缓存”实为开发者通过Cache::remember()等手动写入的键值对;清理需区分场景:全量用php artisan cache:clear,精准删除用Cache::forget()或Cache::tags()->flush(),且须确保驱动支持(如Redis),文件驱动不支持标签。

Laravel 11 中没有独立的“数据库缓存”命令,它不自动缓存 SQL 查询结果。所谓“数据库缓存”,实际是开发者用 Cache::remember()、Model::remember() 等方式手动存入的键值对,存储位置取决于你配置的缓存驱动(如 Redis、file、database)。清理它们,要分清目标,不能只靠一个命令。
应用缓存(含手动查询缓存)用 cache:clear
执行 php artisan cache:clear 会清除所有通过 Cache::put()、Cache::remember() 或 Eloquent 的 remember() 方法写入的缓存项。
- 如果使用 Redis 驱动,它会清空
cachestore 对应的数据库(如database => 0),但不会影响其他 store(如session或queue),前提是 Redis 连接配置中已为各 store 指定了不同database值 - 若所有缓存和 session 都共用同一个 Redis DB(比如都用 db0),这个命令会一并清掉 session、队列重试数据等,需提前检查
config/database.php中 redis → stores 的配置 - 文件驱动下,它只删
storage/framework/cache/data/下的缓存文件,不影响视图或配置缓存
精准清理某次查询缓存用 Cache::forget()
盲目清全量缓存容易误伤业务数据(如用户 token、临时验证码)。更安全的做法是直接删除特定键:
-
Cache::forget('user_dashboard_stats')—— 删除单个缓存键 - 使用标签(tags)管理一组缓存:
Cache::tags(['orders'])->flush(),前提是你写入时用了Cache::tags(['orders'])->remember(...) - 文件驱动不支持 tags,调用
flush()会静默失败,无报错 - Redis 用户可配合
redis-cli -n X KEYS "prefix:*"查键再DEL,但KEYS在生产环境慎用(阻塞命令)
配置、路由、视图缓存各自独立
这些不是“数据库缓存”,但常被混淆。它们各自有专用命令,互不影响:
-
php artisan config:clear—— 删除bootstrap/cache/config.php,让.env和config/文件修改生效 -
php artisan route:clear—— 删除bootstrap/cache/routes-v7.php,使新定义的路由立即可用 -
php artisan view:clear—— 清空storage/framework/views/下编译后的 Blade PHP 文件 -
php artisan optimize:clear—— Laravel 11 默认支持,一键调用以上全部 +cache:clear,适合部署后快速刷新环境
注意:Eloquent 查询日志、关系预加载不走缓存系统
以下情况 cache:clear 完全无效,因为它们根本没进缓存层:
- Eloquent 的
with()预加载只是减少 N+1 查询,结果不自动缓存 - 模型的
$casts、$appends、观察者行为不受缓存命令影响 - 数据库连接池、PDO 长连接、MySQL 查询缓存(已默认禁用)也不在此管理范围内
- 如果你改了数据库里的数据但页面还是旧内容,大概率是代码里漏了
Cache::forget(),而不是缓存命令没跑对


















