cache() 是 thinkphp 5 的多态缓存助手函数,根据参数数量和类型自动执行初始化、读取、写入或删除操作;需注意驱动初始化必须在 config/cache.php 配置或传数组完成,三参数调用仅支持键名、值、整数秒过期时间。

cache() 是 ThinkPHP 5 提供的缓存操作助手函数,用法灵活但参数逻辑容易混淆。它不是固定三参数顺序的“标准函数”,而是根据传入参数的数量和类型自动判断行为——赋值、获取、删除或初始化。关键在于理解它的多态调用规则。
cache() 的三种核心调用方式
-
初始化缓存驱动
传入一个关联数组(必须含'type'):cache(['type' => 'redis', 'host' => '127.0.0.1', 'port' => 6379, 'expire' => 3600]);
此时
cache()执行缓存驱动连接,后续所有cache('key', ...)都基于该配置。
⚠️ 注意:该调用不返回值,仅做初始化;若已在config/cache.php中配置好,则通常无需手动调用。 -
设置或获取缓存值
传入两个参数(字符串键名 + 值或 null):cache('user_123', ['name' => '张三', 'level' => 5]); // 写入,使用默认有效期 cache('user_123', null); // 删除该 key $data = cache('user_123'); // 读取若第二个参数是
null,即为删除;若省略第二个参数,即为读取;若为非 null 值,则为写入(有效期沿用驱动默认值或 config 中设置)。 -
带有效期的写入
传入三个参数(键名、值、过期时间):cache('token_abcd', 'xyz789', 600); // 10 分钟后失效 cache('config', $arr, 0); // 永久有效(0 表示永不过期)第三个参数只接受整数(秒),不能传数组或配置项。
常见误区与注意事项
-
cache('key', $value, ['prefix' => 'app_'])❌ 错误:第三个参数不是配置数组,会被当作过期时间(强制转为 int,结果通常是 0 或 1),导致逻辑异常。 -
cache('key', $value, 'redis')❌ 错误:类型不能这样传;驱动类型必须在初始化时指定。 - 不传参
cache()✅ 合法,会尝试读取默认配置并初始化,但无实际业务意义,一般不用。 - 缓存前缀(
prefix)、有效期(expire)等配置必须在初始化阶段或config/cache.php中设定,运行时无法单次覆盖。
推荐写法(兼顾安全与清晰)
// 确保已正确配置 config/cache.php 后,直接使用:
cache('order_list', $list, 1800); // 写入,30分钟
$data = cache('order_list'); // 读取
cache('order_list', null); // 删除
// 如需临时切换驱动(例如仅某处用 Redis),用 Cache 类更明确:
use think\Cache;
Cache::store('redis')->set('tmp_key', 'val', 60);
不复杂但容易忽略:cache() 的行为完全依赖初始化状态,没配好驱动时它可能静默失败,返回 false 或 null 而不报错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











