Cache::get('key') 默认返回 false(非 null 或空字符串),需用 === false 严格判断是否存在;若缓存未写入、驱动配置错误、键过期或权限不足,均导致取不到。

直接调用 Cache::get('key') 即可获取缓存,但前提是缓存已存在、驱动配置正确、键名合法,且未过期。返回值是缓存的数据本身;若不存在或失效,则默认返回 false。
确保缓存已写入
没存进去就取不到。常用写入方式有:
-
Cache::set('user_123', $userData, 3600)—— 手动存,设 1 小时有效期 -
db('user')->cache('user_123', 3600)->find(123)—— 查询时自动缓存,后续同 key 调用会跳过数据库 -
Cache::inc('counter')或Cache::dec('score')—— 数值型缓存支持原子操作,也会先创建再增减
注意返回值的默认行为
Cache::get() 不会抛错,而是静默返回 false(不是 null 或空字符串):
- 想避免判 false 的麻烦,可指定默认值:
Cache::get('name', '')返回空字符串,Cache::get('count', 0)返回 0 - 用
=== false严格判断是否存在,因为缓存值本身可能是 0、''、[] 等 falsy 值 -
Cache::pull('key')可以“取完即删”,适合一次性任务如验证码、临时令牌
排查取不到的常见原因
返回 false 不一定代表逻辑错,很可能是环境或配置问题:
立即学习“PHP免费学习笔记(深入)”;
- 缓存驱动未生效:检查
config/cache.php中'default'是否匹配stores下的某个键(如'redis'),大小写必须完全一致 - Redis/Memcached 扩展未启用或连接失败:用
php -m | grep redis确认扩展加载;测试连通性可执行Cache::set('test', 'ok', 10)后立刻get - File 驱动权限问题:
runtime/cache/目录需可写,且键名不能含特殊字符(如/、\0) - 缓存已过期或被手动清空:
Cache::clear()或标签删除(如Cache::tag('user')->clear())会影响相关 key
配合标签和前缀更可控
单靠 key 容易冲突或难管理,建议按业务加标签或前缀:
- 写入时打标签:
Cache::tag('user')->set('profile_123', $data, 7200) - 批量清理某类缓存:
Cache::tag('user')->clear(),不影响其他模块 - 配置中设
'prefix' => 'app_v2_',所有 key 自动加上前缀,避免多项目共用缓存时串扰



















