跳转到主内容
极星编程网:以代码为星,赴技术山海!

Laravel配置缓存驱动怎么选_Laravel缓存配置选择方法【方法】

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

相关文章