cache::set()需缓存驱动正确初始化才可行,必须配置config/cache.php文件,指定type、path(file)或host/port(redis)等必要项,过期时间须为正整数秒,且cache::set比cache()更严格,未初始化时抛出异常。

直接用 Cache::set('key', $value, $expire) 是可行的,但前提是缓存驱动已正确初始化——这是绝大多数人设置失败的根本原因。
必须先配好 config/cache.php
TP5 不再从 app.php 读缓存配置,也不接受硬编码 Cache::connect() 作为正式方案。你得手动创建 config/cache.php 文件,返回一个数组,至少包含:
-
type:驱动类型,如
'File'或'Redis' -
path(File 驱动必需):绝对路径,推荐
RUNTIME_PATH . 'cache/',别写./runtime/cache -
host/port(Redis 驱动必需):缺一不可,连不上时
get()静默返回null,不报错 - 可选
prefix:建议加业务前缀,比如'user:'、'admin:',避免键名冲突
设置缓存的正确写法
Cache::set() 要求第三个参数是**正整数秒数**(相对过期时间),不是时间戳,也不是浮点数:
- ✅ 正确:
Cache::set('user_123', $data, 3600)(1 小时后失效) - ✅ 永不过期:
Cache::set('config', $cfg, 0)(Redis 支持,File 也支持) - ❌ 危险:
Cache::set('key', $val, time() + 3600)—— 部分驱动会误判为绝对时间,导致立即失效 - ❌ 隐患:
Cache::set('key', $val, config('cache.expire') * 1.5)—— 浮点数会被忽略,退回到默认 3600 秒
动态算过期时间时,务必强制转整型:(int) round($raw_expire),并校验是否为正整数。
注意 cache() 助手函数和 Cache:: 的差异
两者行为不完全一致:
-
cache('key', $val, 3600)在传参调用时会跳过初始化检查,驱动未配好就直接返回false或null -
Cache::set('key', $val, 3600)更严格:未初始化时抛出InvalidArgumentException,利于早期发现问题 - 标签操作只能用
Cache::tag('user')->set(...),cache()不支持链式调用 - 自增/自减(
inc/dec)仅 Redis/Memcached 支持,File 驱动静默失败
验证是否真生效了
别只看 set() 返回 true 就以为成功:
- File 驱动:去
runtime/cache/目录下找对应哈希子目录(如7d/7d8a...)里有没有文件 - Redis 驱动:用
redis-cli连上后执行KEYS "your_prefix*"查键是否存在 - 开启调试日志:
'cache' => ['debug' => true],观察实际写入的 TTL 值 - 用
Cache::has('key')或Cache::get('key', 'default')主动读一次确认
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











