ThinkPHP缓存驱动切换需在config/cache.php中显式使用env('CACHE_DRIVER', 'file')配置default项,.env变量不会自动注入;须确保.env格式正确(无空格、UTF-8无BOM)、位于根目录,并清除runtime/config.php缓存。

直接改 config/cache.php 里的 'type' 值没用——ThinkPHP 不会自动从 .env 读取缓存驱动类型,必须手动把 env() 调用写进配置文件里,否则 .env 中的 CACHE_DRIVER 完全不生效。
cache.php 必须显式调用 env() 获取驱动类型
ThinkPHP 的缓存驱动切换不是靠环境变量“自动注入”,而是靠你在 config/cache.php 中主动用 env('CACHE_DRIVER', 'file') 替换掉硬编码的字符串。框架只在初始化时执行一次这个函数调用,之后就固化为最终值。
-
'default' => env('CACHE_DRIVER', 'file')是必须改的核心项;漏掉这行,.env里的CACHE_DRIVER=redis就是废纸 - 不要只改
stores['redis']配置而忽略default,否则即使 Redis 连接参数都对,系统仍走默认的file驱动 - 第二个参数(如
'file')不能省略,否则env()返回null会导致驱动初始化失败,报错Driver [null] not supported
.env 文件格式错误会让 CACHE_DRIVER 彻底失效
ThinkPHP 使用 vlucas/phpdotenv 解析 .env,它对空格、引号、编码零容忍。哪怕多一个空格,整行变量都会被跳过,且不报错。
-
CACHE_DRIVER=redis✅;CACHE_DRIVER = redis❌(等号两侧有空格) - 值含特殊字符(如
@、/)必须加单引号:REDIS_PASSWORD='p@ss/word'✅ - 文件必须是 UTF-8 无 BOM 编码;Windows 记事本保存极易带 BOM,建议用 VS Code 另存为 “UTF-8”(不带签名)
- 确认
.env在项目根目录(与app/、config/同级),不在public/或config/下
切换后必须清空 runtime/config.php 缓存
ThinkPHP 启动时会把所有配置(包括 env() 执行结果)合并写入 runtime/config.php。只要这个文件存在,改了 .env 或 cache.php 都不会重新加载。
立即学习“PHP免费学习笔记(深入)”;
- 执行
php think clear:config是最稳妥方式;php think optimize:config也行,但会重建整个配置缓存 - 也可以手动删掉
runtime/config.php文件(注意:别删错成runtime/cache/目录) - 如果用 CLI 命令测试(如
php think cache:clear),确保当前 shell 环境没残留旧的APP_ENV,否则可能加载了错误环境的缓存配置
最容易被忽略的是:缓存驱动切换不是独立行为,它依赖 APP_ENV 决定加载哪个环境目录下的 cache.php。比如你设了 APP_ENV=prod,那框架只读 config/prod/cache.php,根目录的 config/cache.php 和 .env 里的 CACHE_DRIVER 都只是后备——如果 config/prod/cache.php 里没写 env() 调用,那就真切不动。



















