必须修改 config/cache.php 中 redis store 的 prefix 配置,因为 laravel 9 默认硬编码 'laravel_cache:' 且未引用 env('cache_prefix'),仅改 .env 无效;需在 config/cache.php 中将 prefix 设为 env('cache_prefix', 'laravel9_').env('app_env', 'local').':',再执行 config:clear 和 config:cache 才生效。

必须改 config/cache.php 里的 redis store 配置,不能只靠 .env 或全局 prefix 配置项。
为什么 CACHE_PREFIX 在 Laravel 9 Mac 下不生效
Laravel 9 默认的 cache.php 中 'prefix' 是写死在 stores.redis 里的字符串(如 'laravel_cache:'),而 env('CACHE_PREFIX') 并未被引用。如果你只在 .env 加了 CACHE_PREFIX=myapp_v2: 却没改配置文件,Laravel 会完全忽略它。
-
config/cache.php中的'prefix' => 'laravel_cache:'是硬编码,不读环境变量 -
cache:clear命令只清stores.redis.prefix指定的前缀范围,不是整个 Redis DB - Mac 上用 Homebrew 装的 Redis 默认无密码,但若你启用了
requirepass,password字段名必须是'password',不是REDIS_PASSWORD
正确设置 Redis 缓存前缀的三步操作
直接修改 config/cache.php 的 redis store 配置段,确保前缀能随环境变化且可部署:
- 找到
'stores' => [ 'redis' => [ ... ] ]块,在其中添加或替换'prefix'行:'prefix' => env('CACHE_PREFIX', 'laravel9_').env('APP_ENV', 'local').':', - 在
.env中设值,例如:CACHE_PREFIX=myapp_v2
- 执行
php artisan config:clear && php artisan config:cache,否则新前缀不会加载
验证前缀是否真正起作用
别信配置文件写了就完事,Mac 环境下容易因 OPcache 或配置缓存残留导致误判:
- 进
php artisan tinker,运行:Cache::store('redis')->put('test_key', 'ok', 60);然后用redis-cli查看实际 key:redis-cli KEYS "myapp_v2_development:test_key"
(注意匹配你.env里设的APP_ENV) - 如果返回空,说明前缀没生效——大概率是
config:cache没跑,或connection指向了错误的 Redis 配置名(比如你改了connection => 'cache',但config/database.php里没定义cache连接) - Mac 上用
brew services restart redis后,记得重连,否则tinker里可能报Connection refused
前缀不是加个字符串就完事;它决定 cache:clear 清什么、Redis 监控查什么、多项目共用实例时会不会互相覆盖。Mac 开发时最容易忽略 config:cache 这一步,结果改了半天配置,redis-cli KEYS * 里还是看到一堆 laravel_cache: 开头的旧 key。











