thinkphp 5 的 cache() 函数需先初始化驱动才能可靠读写,未初始化时操作可能静默失败;支持文件/redis驱动配置、键值存取、数据库查询缓存及自定义标识清除。

ThinkPHP 5 的 cache() 助手函数是操作缓存最常用的方式,它封装了初始化、读取、写入和删除等动作,用法简洁但细节关键——尤其要注意「是否已初始化缓存驱动」对行为的影响。
缓存初始化(一次性设置驱动与参数)
首次使用缓存前,建议显式初始化,避免依赖默认配置出错。传入数组即触发初始化:
-
文件缓存(推荐开发环境):
cache(['type' => 'File', 'path' => RUNTIME_PATH . 'cache/', 'expire' => 3600]); -
Redis 缓存(生产环境常用):
cache(['type' => 'redis', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'select' => 0, 'expire' => 0]); - 初始化后会返回缓存实例对象;若不初始化,后续调用会尝试自动加载 config/cache.php 配置,但传参写入时会跳过检查,可能静默失败。
缓存读写与删除(核心日常操作)
初始化完成后,即可通过键名快速操作数据:
-
写入缓存(带过期时间):
cache('user_1001', ['name' => '张三', 'level' => 5], 3600);—— 第三个参数为秒数,0 表示永久 -
读取缓存:
$data = cache('user_1001');—— 若不存在或已过期,返回null -
删除缓存:
cache('user_1001', null);—— 值为null即触发删除 - 注意:
cache('key')和cache('key', '')不同——后者是写入空字符串,不是读取。
数据库查询结果缓存(连贯操作快捷用法)
在模型或 Db 查询中直接启用缓存,省去手动存取步骤:
-
使用默认缓存时间(读取 config/cache.php 中的
default.expire):db('article')->cache(true)->where('id', 123)->find(); -
指定有效期(单位:秒):
db('article')->cache(true, 600)->find(); -
自定义缓存标识(便于单独清除):
db('article')->cache('hot_article_list', 1800)->select();—— 后续可用cache('hot_article_list', null)清除
常见问题与避坑提示
实际使用中容易忽略这些细节:
-
助手函数
cache()和Cache::class行为不完全等价:无参调用cache()会尝试初始化,但cache('key', $val)不检查驱动是否就绪,未初始化时直接返回false或null,不报错 - 缓存路径需有写入权限(如 File 类型),否则写入静默失败;可配合
is_writable()检查 - Redis 等远程驱动需确保服务运行且网络可达,建议在初始化后加简单测试:
cache('test', 'ok') && cache('test') === 'ok' - 缓存键名避免特殊字符和过长,推荐用下划线分隔的英文组合,如
user_profile_1001
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











