thinkphp5缓存需显式配置config/cache.php,type、path(file)或host/port(redis)为必需项;cache::clear()仅清逻辑缓存,物理文件需php think clear --cache;键名须加业务前缀防冲突。

ThinkPHP5 默认不启用缓存,必须显式配置驱动并初始化,否则 Cache::set() 或 cache() 助手函数会静默失败或回退到空实现 —— 这是绝大多数人踩坑的起点。
缓存配置必须写在 config/cache.php 里才生效
TP5.0/5.1 不再从 config/app.php 读取 cache 配置项,硬编码调用 Cache::connect() 仅临时生效,且无法被模型、查询缓存等内部机制识别。
- 正确路径:新建
config/cache.php,返回数组配置(不是追加到其他文件) - 必须包含
'type',比如'type' => 'File'或'type' => 'Redis' -
'path'对File驱动是必需的,且目录需可写;runtime/cache/是常用路径,但不能写成./runtime/cache(相对路径在 CLI 下易失效) - 若用
Redis,'host'、'port'缺一不可,连不上时Cache::get()返回null,无报错提示
清除缓存别只靠 Cache::clear()
Cache::clear() 只清逻辑缓存,不删物理文件或 Redis 键 —— 尤其对 File 驱动,它只是遍历内存中已加载的键名列表,而实际磁盘上残留的缓存文件可能大量堆积。
- 开发阶段推荐用命令行:
php think clear --cache(TP5.1.14+),它会真实删除runtime/cache/下全部文件 - 手动清文件夹时,注意
File驱动默认按哈希分目录存储(如runtime/cache/7d/7d8a...),递归删除必须完整 - 用标签(
Cache::tag('user')->set())后,Cache::clear('user')才能精准清除,否则Cache::clear()对带标签的缓存无效 - Redis 场景下,
Cache::clear()实际执行的是FLUSHDB,影响整个 DB,生产环境慎用
cache() 助手函数和 Cache:: 类行为不完全等价
助手函数 cache() 在无参数调用时会尝试初始化缓存(读 config/cache.php),但传参调用(如 cache('key', $val))会跳过初始化检查,直接走当前已注册的驱动 —— 如果驱动未初始化,就返回 false 或 null,不报错。
- 安全写法:先确保
config/cache.php存在且有效,再用cache('key', $val, 3600) -
Cache::set('key', $val)更严格,未初始化时抛出InvalidArgumentException,利于早期发现问题 - 两者都支持标签,但
cache()不支持cache()->tag('x')->set()链式调用,只能用Cache::tag() - 自增操作
Cache::inc('counter')仅Redis和Memcached驱动支持,File驱动会静默失败
缓存键名冲突和前缀遗漏是线上最隐蔽的性能问题:同一个 Cache::set('list') 在用户模块和后台模块里共用,会导致数据互相覆盖。务必用 'prefix' => 'admin_' 或业务标识拼接键名,而不是依赖文档里“默认为空”的说明。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











