thinkphp6缓存配置需彻底重构:第一步删除config/cache.php中type硬编码;第二步在.env中用全小写cache_driver=redis指定驱动;第三步重写stores结构,将参数内嵌并确保select/timeout类型正确;第四步通过命令行验证set/get是否成功。

ThinkPHP5升6后缓存驱动配置不能直接复用config/cache.php里的旧写法,因为TP6彻底重构了缓存体系,.env优先级高于配置文件,且stores结构、default指向、连接参数命名全部变更;不重写会导致Cache::get()静默返回null,而你还在查数据库。
第一步:删掉config/cache.php里所有type硬编码
把原来TP5中类似'type' => 'redis'这种全局驱动声明整行删除。TP6不再允许在配置数组顶层设type,否则会覆盖stores定义,导致store失效。
这一步必须做——哪怕你只用Redis,也绝不能留着这一行。保留它,Cache门面就会跳过stores,直接走file回退逻辑。
第二步:在.env里明确指定驱动类型
CACHE_DRIVER=redis
或
CACHE_DRIVER=memcached
【CACHE_DRIVER必须全小写,且不能带空格或引号】。如果写成CACHE_DRIVER = "redis"或CACHE_DRIVER=Redis,TP6解析失败,默认 fallback 到 file 驱动,且不报错。
第三步:重写config/cache.php的stores结构
只保留default和stores两个键,其他如expire、prefix等通用参数必须收进对应store内部:
return [
'default' => env('cache.driver', 'file'),
'stores' => [
'redis' => [
'type' => 'redis',
'host' => env('redis.host', 'localhost'),
'port' => (int) env('redis.port', 6379),
'password' => env('redis.password', ''),
'select' => (int) env('redis.select', 0),
'timeout' => (float) env('redis.timeout', 3.0),
'read_timeout' => (float) env('redis.read_timeout', 3.0),
'prefix' => env('redis.prefix', 'tp6_'),
],
],
];
注意:select和timeout必须强制转为int/float,否则字符串"0"会导致Redis连接静默失败;redis.host别写127.0.0.1,改用localhost避免IPv6解析延迟。
第四步:验证是否真正生效
执行命令行测试:
php -r "var_dump(Cache::store('redis')->set('test_key', 'ok', 10));"
再执行:
php -r "var_dump(Cache::store('redis')->get('test_key'));"
两次都输出true和string(2) "ok"才算通。如果第二次是bool(false),说明驱动没切过去,立刻回头检查.env和stores.redis里select是否为数字、password是否显式为空字符串。
这一步操作起来很简单,直接把两行命令复制粘贴进去就行。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











