必须将'default' => 'redis'写在config/cache.php中,且stores.redis配置须完整(type小写、select为整数、password显式为空等),否则静默降级为file驱动。

default 配置项必须改在 config/cache.php 里,不是 .env,也不是 config.php(TP5.0 除外);改错位置等于没改。
ThinkPHP 6/8 的 default 必须写在 config/cache.php 的 'default' 键下
TP6 和 TP8 完全不读取 .env 中的 CACHE_DRIVER 或 CACHE_STORE —— 这些变量只在部分旧版或第三方包里起作用,官方缓存门面不识别。实际生效的唯一入口是 config/cache.php 中的 'default' => 'redis'(小写,字符串)。
-
'default'值必须是小写字符串,如'redis'、'file'、'memcached';写成'Redis'或Redis::class会静默失败 - 仅改
default不够,对应驱动的完整配置必须存在于stores数组中,例如stores.redis缺字段(如漏掉select或password)会导致降级为file - TP8 更严格:它甚至不解析
.env里的 Redis 相关变量(如REDIS_HOST),所有连接参数必须硬编码或通过config()动态注入
ThinkPHP 5.0/5.1 的 default 在 application/config.php 里
TP5 系列没有独立的 config/cache.php,缓存配置直接嵌在 application/config.php 的 'cache' 数组内,'type' 字段即等价于其他版本的 default。
- 字段名是
'type',不是'default',值同样需小写:'type' => 'redis' - TP5.0 不支持
stores结构,所有参数(host、port、timeout)都平铺在'cache'数组里 - 常见翻车点:
'type' => 'Redis'(首字母大写)→ 驱动加载失败,Cache::get()永远返回null
为什么改了 .env 还是走 file 驱动?
因为 ThinkPHP 缓存门面不读 .env 里的缓存驱动开关——CACHE_DRIVER=redis 对 TP6/8 完全无效。这个变量常被误传为“标准配置方式”,但它既不被框架核心加载,也不被 think-redis 扩展识别。
- 现象:
Cache::get()返回null,runtime/cache/目录却有文件生成 → 说明驱动根本没切过去,还在用file - 验证方法:执行
php -r "var_dump(config('cache.default'));",输出必须是你设的字符串(如string(5) "redis"),否则配置未生效 - 清缓存不是万能的:改完配置后删
runtime/cache/只影响 file 驱动的自动加载缓存,对驱动切换无作用;真正要清的是 OPCache 或 Composer autoload dump(composer dump-autoload)
多 store 场景下 default 不等于“全局唯一”
设了 'default' => 'redis',不代表所有 Cache::get() 都走 Redis —— 如果代码里显式调用了 Cache::store('file'),那就还是走文件。
- 门面类的默认行为只影响不指定
store的调用,例如Cache::set('k', 'v') - 一旦写了
Cache::store('memcached')->get('k'),就完全绕过default配置 - 调试时可用
Cache::getStore()查当前门面绑定的 store 实例,避免“以为走了 Redis,其实走了 file”
default 是最表层的动作,真正卡住的地方永远在 stores 配置完整性、PHP 扩展可用性、以及你是否在代码里无意绕过了门面默认行为。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











