laravel 11 无原生数据库查询缓存,需手动用 cache::remember() 或标签缓存查询结果;推荐 redis 驱动以支持标签与 ttl;可用 php artisan cache:tags users clear 精准清理,配合模型事件自动刷新缓存。

Laravel 11 中没有“数据库缓存”这一原生概念——它不把数据库查询结果自动缓存到 Redis 或文件中。所谓“数据库缓存”,通常指开发者**主动使用 Cache 门面缓存查询结果**(如 `Cache::remember()`),或**通过模型监听、事件、手动策略将 Eloquent 查询结果存入缓存存储**(如 Redis)。Artisan 命令本身不管理数据库查询缓存,但能高效管理支撑它的底层缓存系统。
确认缓存驱动支持实际场景
数据库相关缓存依赖于 Laravel 的缓存驱动。若你用 `Cache::remember('users_list', 3600, fn() => User::all())`,那这个键就存在你配置的缓存驱动里:
- Redis / Memcached:支持缓存标签(tags)、TTL 精确控制、批量清除,适合多模块隔离缓存(如按用户 ID、租户、角色打标签)
- File / Database 驱动:不支持标签,只能按 key 清除或全清,不适合精细化管理数据库查询缓存
检查 config/cache.php 中 'default' 是否设为 'redis',并确保 REDIS_HOST 等环境变量正确。Laravel 11 默认推荐 Redis 作为生产缓存驱动。
用 Artisan 清理与数据库查询相关的缓存项
假设你为用户列表缓存打了 users 标签:Cache::tags(['users'])->remember('list_active', 3600, fn() => User::where('active', 1)->get()),可这样精准清理:
-
清指定标签全部缓存:运行
php artisan cache:tags users clear -
清多个标签(交集):如
php artisan cache:tags users profile clear只删同时带这两个标签的项 -
代码中动态清除:在命令类或控制器里写
Cache::tags(['users'])->flush() -
强制指定 Redis 连接:如果用了多个 Redis store,加
store(),例如Cache::store('cache')->tags(['users'])->flush()
避免误操作:别混淆 config/route/view 缓存
执行 php artisan cache:clear 只清 Cache::put() 类缓存(含你存的数据库结果),它不会影响:
-
config:clear:只删bootstrap/cache/config.php,不影响数据库连接配置的运行时读取 -
route:clear:只删路由映射文件,和查询缓存无关 -
view:clear:只清编译后的 Blade 模板,不碰数据缓存
如果你改了 config/database.php,需先 config:clear 再 config:cache(生产环境),否则缓存的配置仍用旧数据库连接参数。
配合模型更新自动刷新缓存(非 Artisan,但强相关)
Artisan 不自动监听模型变化,但你可以结合事件+命令实现闭环:
- 在
User模型中定义static::saved或static::deleted事件 - 事件处理器里调用
Cache::tags(['users'])->flush() - 也可封装一个自定义 Artisan 命令,如
php artisan cache:flush-users,内部执行相同逻辑,便于运维手动触发
这样,当用户数据变更,关联缓存就同步失效,无需人工干预。











