Laravel 9 中通过 config/cache.php 的 prefix 配置统一设置数据库缓存前缀,推荐设为 env('CACHE_VERSION', 'v1') . '_' . env('APP_NAME', 'laravel'),需配合 .env 变量与 php artisan config:clear 生效,database 驱动下 key 自动拼接前缀,无需改表结构。

在 Laravel 9 中设置数据库缓存前缀,核心是统一控制所有缓存键的命名空间,便于版本切换、多环境隔离或批量清理。它不依赖缓存驱动类型(file、redis、database 都适用),而是通过配置项全局生效。
修改 config/cache.php 中的 prefix 配置
打开 config/cache.php,找到 'prefix' 项。默认值是 env('CACHE_PREFIX', 'laravel_cache'),你可以直接改为动态拼接形式:
- 推荐写法:将版本号 + 应用名作为前缀,例如
'prefix' => env('CACHE_VERSION', 'v1') . '_' . env('APP_NAME', 'laravel') - 确保
.env文件中已定义对应变量,如CACHE_VERSION=v2和APP_NAME=myapp - 改完后必须运行
php artisan config:clear,否则缓存配置不会更新
数据库缓存表需兼容前缀逻辑
若使用 database 缓存驱动,Laravel 会把缓存数据存在 cache 表中,但该表本身不支持“前缀”字段——缓存键(key 列)会自动带上你配置的 prefix 值。
- 例如前缀为
v2_myapp,实际存入表中的 key 是v2_myapp:users_123 - 无需修改表结构或迁移文件,Laravel 内部自动处理拼接
- 验证方式:执行
Cache::put('test_key', 'ok', 300)后查cache表,观察key字段是否含你设定的前缀
避免 Redis 或其他驱动下前缀失效
某些场景下前缀看似没生效,常见原因包括:
- 用了
Cache::store('redis')->get()但没同步更新stores.redis.prefix—— 建议统一走全局Cache::get(),或显式配置各 store 的 prefix -
config/cache.php中stores.redis.prefix覆盖了顶层prefix,可删掉该行,让其继承全局值 - 缓存被序列化后 key 名被包裹(尤其 tags 场景),此时 prefix 仍有效,但需确认
stores.redis.serialize为true(Laravel 9+ 默认开启)
配合缓存版本升级快速清旧数据
前缀本质是命名空间,升级版本时只需改 CACHE_VERSION 并清一次缓存,旧键自然失效:
- 例如从
v1升到v2,所有新缓存键变成v2_myapp:xxx,旧键不再被读取 - 无需手动删库或 flush Redis,安全且无停机风险
- 上线前可在测试环境验证:改
.env→ 运行config:clear→ 查新 key 是否生成


















