ThinkPHP多环境缓存驱动配置核心是优先修改.env文件的CACHE_DRIVER,而非硬编码config/cache.php;不同环境通过.env变量(如REDIS_HOST、REDIS_TIMEOUT)差异化配置Redis参数,并需清空runtime/cache以确保新配置生效。

ThinkPHP多环境切换时缓存驱动配置管理,核心是让不同环境(如开发、测试、生产)自动加载对应缓存后端,避免手动改代码或误用本地file驱动上线导致性能崩溃。直接硬编码config/cache.php或只改运行时配置,都会在环境切换时失效或引发缓存错乱。
优先改 .env 文件控制驱动类型
修改 【.env 文件中的 CACHE_DRIVER】 是唯一可靠且生效的起点。ThinkPHP 6+ 的缓存驱动由环境变量决定,config/cache.php 只负责具体参数,不决定驱动类型。
CACHE_DRIVER=redis → 开发环境可设为 file,测试环境用 redis,生产环境必须为 redis 或 memcached。
常见错误:只改了 config/cache.php 里的 'type' => 'redis',但 .env 里仍是 CACHE_DRIVER=file,结果重启后仍走文件缓存——框架会无视 config/cache.php 的 type 配置。
立即学习“PHP免费学习笔记(深入)”;
不同环境配不同 Redis 连接参数
方法一:用 .env 环境变量覆盖连接细节
在 .env.development 中写:
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_TIMEOUT=3
REDIS_READ_TIMEOUT=3
在 .env.production 中写:
REDIS_HOST=10.10.20.5
REDIS_PORT=6380
REDIS_PASSWORD=prod_!@#x9k
REDIS_TIMEOUT=3
REDIS_READ_TIMEOUT=3
注意:Redis 密码不能为空字符串,否则 AUTH 失败;【REDIS_TIMEOUT 和 REDIS_READ_TIMEOUT 必须显式设为 3,否则默认阻塞等待,高并发下请求卡死】
多级缓存回退策略配置
第一步:在 .env 中指定主缓存驱动
CACHE_DRIVER=redis
第二步:在 config/cache.php 的 stores 数组中定义 redis + file 回退链
'redis_file_fallback' => [
'type' => 'redis',
'host' => env('REDIS_HOST', '127.0.0.1'),
// …其他 redis 参数
'fallback' => ['type' => 'file'],
],
第三步:将 default 改为该 store 名
'default' => 'redis_file_fallback',
这一步必须做,否则即使定义了 stores,框架仍用默认的 redis store,不会触发 fallback 逻辑。
切换环境后清空 runtime 缓存
执行 php think cache:clear —— 这会删掉 runtime/cache/ 下所有缓存文件。
不清理会导致旧环境下的缓存配置被自动加载缓存住,新 .env 设置看似生效,实际仍走旧驱动。
尤其当从 development 切到 production 时,若 runtime/cache/ 里还存着 file 驱动的类缓存,Redis 配置再正确也启动不了。



















