thinkphp 6.1+ 必须将缓存驱动配置从 cache.driver 改为 cache.default,且需在 cache.stores 中完整定义对应驱动(如 redis),否则初始化失败;cache::store() 参数应为 store 名而非驱动名,标签缓存需显式配置支持标签的 store。

ThinkPHP 6.1+ 缓存驱动配置从 cache.driver 切换到 cache.default 的实际操作
ThinkPHP 6.1 起,cache.driver 配置项已被移除,直接写它会导致缓存初始化失败、Cache::get() 报错 “Driver not supported”。这不是警告,是硬性报错。
必须改用 cache.default 指定驱动名,并确保对应驱动类已注册(如 File、Redis、Memcached):
-
cache.default值必须是字符串,例如'redis',不能是数组或null - 驱动类需在
cache.stores中完整定义,比如redis对应的配置块必须存在且字段合法(host、port、database等) - 旧版
cache.type或cache.prefix等顶层键,现在要挪到对应 store 下,如cache.stores.redis.prefix
为什么 Cache::store('redis') 在新版里不生效?
因为 Cache::store() 不再接受驱动名字符串作为参数——它只认 store 名(即 cache.stores 下的键名),而不再是驱动类型名。
常见错误现象:Cache::store('redis')->get('key') 报错 “Store [redis] not found”,哪怕你 cache.default = 'redis' 也没用。
- 正确写法是先在
cache.stores中定义一个名为redis的 store(哪怕内容和默认 redis 一样),再调用Cache::store('redis') - 如果只是想临时切驱动,别用
store(),改用Cache::connect(['type' => 'redis', ...]),但注意:该方法返回的是新实例,不是全局切换 -
Cache::driver()已废弃,调用会抛出BadMethodCallException
Redis 缓存中间件中 cache.default 和 cache.tag_store 的配合要点
启用标签缓存(Cache::tag())时,cache.tag_store 必须指向一个支持标签的驱动(目前仅 redis 和 memcached),且该 store 必须显式定义在 cache.stores 中。
容易踩的坑是:设了 cache.tag_store = 'redis',但没在 cache.stores 里配 redis 块,结果 Cache::tag('user')->get('profile') 静默失败或报 “Tag not supported”。
-
cache.tag_store的值必须和cache.stores中某个键完全一致,大小写敏感 - 若用 Redis 做主缓存又做 tag_store,建议用不同 database(如
database => 0用于普通缓存,database => 1用于 tag),避免 key 冲突 - File 驱动不支持标签,设
cache.tag_store = 'file'会触发运行时异常
升级后 think cache:clear 命令失效的排查路径
命令行清缓存失败,大概率是 cache.default 配置缺失或 store 定义不全,导致命令启动时无法实例化缓存驱动。
典型错误信息:InvalidArgumentException: Cache store [default] is not defined,其实这里的 default 是命令内部 fallback 名,不代表配置项名。
- 检查
config/cache.php是否存在,且返回数组包含'default' => ...和'stores' => [...] - 确认
cache.default值是否拼写错误,比如写成'redsi'或'Redis'(驱动名全部小写) - 若使用环境配置(如
.env),确保CACHE_DEFAULT=redis已设置,且未被其他 config 文件覆盖
缓存驱动适配的核心就两条:配置键名必须对,store 定义必须实。少一个点,整个缓存链就断在初始化那一步,后面所有调用都白搭。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











