高并发写多读少选Redis,少量配置且无Redis可用Database但需加key唯一索引;config:cache仅缓存config数组,不涉及驱动配置;CACHE_DRIVER变更需重启FPM或队列worker;file驱动禁用于生产;Cache::get与config()互不相通。
缓存驱动选
还是
?看并发和一致性要求
高并发写多读少的场景下,
是更稳妥的选择;如果只是缓存少量配置(比如后台开关、版本号),且项目已用 MySQL 且没上 Redis,
驱动也能跑,但要注意它默认用
表 + 全表锁查询,压测时容易卡住。
驱动支持原子操作、过期自动清理、无锁读写,Laravel 的
在它上面表现稳定
驱动底层调用
,没有索引的话查
字段会全表扫描
若坚持用
,务必给
表的
字段加唯一索引:
命令到底缓存了什么?
它只把
文件里 return 的数组合并成一个 PHP 文件(
),不碰任何缓存驱动配置本身。也就是说,
这个环境变量或
设置,是在运行时才被读取的,跟
无关。
执行
后,所有
调用都从那个静态 PHP 数组里取值,不再 require 每个 config 文件
但
、
这些依然走你当前配置的驱动(由
决定)
改了
里的
,必须重启 FPM 或队列 worker 才生效,光清 config 缓存没用
本地开发用
驱动,上线切
为什么还报错?
常见原因是
里写了死配置,比如
,但线上 Redis 连接名其实是
,或者
里漏配了
。
检查
中
的值是否匹配
里
下的真实连接名
运行
,输入
看是否连得上,比看日志更快定位连接问题
驱动在 Windows 和某些 NFS 挂载路径下会出现权限/锁异常,别在生产环境用它
缓存配置键名冲突:为什么
返回 null?
Laravel 的配置缓存机制和应用缓存是两套体系。
读的是
生成的 PHP 数组,而
是往你选的缓存驱动里查一个叫
的 key —— 它们完全不互通。
不要指望
会让
自动命中配置项
如果真要缓存某个配置值,显式地
避免用点号命名缓存 key,比如
,某些驱动(如
)对点号敏感,可能解析失败
最常被忽略的一点:缓存驱动切换后,旧缓存不会自动清空。Redis 里还留着上周的
缓存,新配置却指向
,这时候查不到数据不是配置错了,而是根本没查对地方。
redisdatabaseredisdatabasecacheredisCache::rememberdatabaseDB::table('cache')->where(...)->first()keydatabasecachekeyALTER TABLE cache ADD UNIQUE KEY key_unique (`key`)config:cacheconfig/*.phpbootstrap/cache/config.phpCACHE_DRIVER=redis.envconfig:cachephp artisan config:cacheconfig()Cache::get()Cache::put()CACHE_DRIVER.envCACHE_DRIVERfileredisconfig/cache.php'redis' => ['connection' => 'default']cache.envREDIS_HOSTconfig/cache.phpstores.redis.connectionconfig/database.phpredis.clientsphp artisan tinkerCache::store('redis')->get('test')fileCache::get('app.name')config('app.name')config:cacheCache::get('app.name')app.nameconfig:cacheCache::get()Cache::put('my_app_name', config('app.name'), 3600)user.123.profilememcachedviewdatabase