thinkphp 5.1 的 php think clear 仅暴力删除 runtime/cache/ 和 runtime/data/ 目录,无视缓存配置,redis 等远程缓存不受影响;6.0 则通过容器调用各驱动清理接口,如 redis 执行 flushdb、file 驱动清目录,行为由 config/cache.php 中的 default 配置决定。

ThinkPHP 5.1 和 6.0 的 php think clear 命令表面写法相同,但执行效果完全不同:5.1 版本只是暴力清空 runtime/cache/ 和 runtime/data/ 目录下的文件,而 6.0 版本会通过容器调用 CacheInterface 和 TemplateCacheInterface 接口,触发 Redis 缓存执行 FLUSHDB、文件缓存删除目录、模板缓存重置等完整清理链路,不依赖路径硬编码。
5.1 的 clear 命令到底做了什么
执行 php think clear 时,框架只遍历并删除以下两个固定路径:
• runtime/cache/
• runtime/data/
它完全不读取 config/cache.php 中的配置,也不管你当前用的是 Redis 还是 File 驱动——哪怕 cache 配置为 'type' => 'redis',命令也只删本地文件,【Redis 数据库里的缓存一条都不会动】。
多应用模式下,app/demo/runtime/cache/ 这类路径被忽略;Swoole 扩展产生的 runtime/swoole/ 缓存也被跳过;自定义缓存路径如 'path' => '/tmp/tp_cache' 更不在扫描范围内。
6.0 的 clear 命令行为升级
6.0 的 clear 不再是简单目录删除脚本,而是通过依赖注入调用各缓存驱动自身的清理逻辑:
• File 驱动:清空 runtime/cache/ 并重建目录结构
• Redis 驱动:向 Redis 服务发送 FLUSHDB 命令(不是 DEL key)
• Memcached 驱动:调用 flush() 方法
• 模板缓存:默认仍不清理 runtime/view/,需额外执行 php think clear:template
这一步的关键在于,它真正尊重了你的缓存配置。如果你在 config/cache.php 中把 default 改成 redis,那么 clear 就会连 Redis;如果改回 file,就只删文件——【行为由配置驱动,而非写死路径】。
如何验证当前版本的 clear 是否生效
第一步:确认 ThinkPHP 版本
执行 php think version,输出必须含 v5.1. 或 v6.0. 开头
第二步:检查实际缓存驱动
打开 config/cache.php,找到 'default' => 'file' 或 'default' => 'redis' 这一行
第三步:触发一次缓存写入
在控制器中执行 Cache::set('test_key', 'test_value', 3600);,再用 Cache::get('test_key') 确认写入成功
第四步:运行 clear 并验证
执行 php think clear 后立即调用 Cache::get('test_key') —— 若返回 null,则文件缓存已清;若仍返回值,说明你用的是 Redis 驱动且未被清理,需手动连接 Redis 执行 FLUSHDB
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











