ThinkPHP5缓存如何使用_ThinkPHP5缓存设置与清除方法【性能】
ThinkPHP5默认不启用缓存,需手动配置config/cache.php并设定type、path等参数。File驱动清除缓存时,Cache::clear()仅清逻辑索引,物理文件需用phpthinkclear--cache命令删除。cache()助手函数与Cache::类操作行为有别,使用前必须确保驱动已初始化。生产环境需注意键名前缀避免冲突。
ThinkPHP5 的缓存机制,说简单也简单,说坑也不少。很多开发者一上来就踩的坑是:以为框架默认开了缓存,结果调用 Cache::set() 或 cache() 助手函数时,数据要么没存进去,要么返回 null 还没任何报错——说到底,TP5 默认压根不启用缓存,必须手动配置驱动并完成初始化,否则那些缓存操作只会静默失败。
缓存配置必须写在 config/cache.php 里才生效
TP5.0/5.1 做了一个关键调整:不再认 config/app.php 里的 cache 配置项。如果你是在代码里硬生生调用 Cache::connect() 临时连接,那只有当前请求有效,模型查询缓存、路由缓存这些内部机制根本不会用上它。
- 正确做法是新建
config/cache.php,返回一个完整的数组配置,千万别往其他文件里追加。 type是必填项,比如'type' => 'File'或'type' => 'Redis'。- 使用
File驱动时,path字段必不可少,而且目录必须可写。常用路径是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,会清空整个数据库,生产环境一定要慎用。
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_',或者手动拼接带有业务标识的键名,千万别依赖文档里“默认为空”的说法。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















