ThinkPHP 5.0.24 升级至 5.1 后缓存配置必须重写:配置文件移至根 config/cache.php,采用二维数组结构,顶层键为驱动名,default 驱动不可省略;Redis 配置中 auth 改为 password,timeout 单位变为毫秒;cache() 函数依赖默认驱动,推荐显式调用 Cache::store();需清空 runtime/ 并确保目录可写。

ThinkPHP 5.0.24 升级到 5.1 后,缓存配置不能直接沿用,因为 5.1 彻底重构了缓存驱动加载机制和配置结构。原 config/cache.php 中的数组写法多数失效,必须按新规范重写,否则缓存不生效、报错或静默降级为 file 驱动。
缓存配置文件位置与格式变化
5.0 的 cache.php 放在 application/config/ 下,是纯 PHP 数组返回;5.1 要求缓存配置统一归入 config/cache.php(即根 config 目录),且必须返回标准二维数组,顶层键名必须是驱动类型(如 'file'、'redis'、'memcache'),每个驱动下再定义连接参数和行为选项。
- 删除原 application/config/cache.php,新建 config/cache.php
- 不再支持
'type' => 'redis'这种全局单类型写法,必须显式声明各驱动配置块 - 默认驱动通过
'default' => 'file'指定,不可省略
Redis 缓存配置迁移要点
若原项目使用 Redis,5.0 常用 cache('key', $value, 3600) 自动走 redis 驱动,但 5.1 需明确配置 host、port、password 等字段,且密码字段名从 'auth' 改为 'password',超时单位也由秒变为毫秒(仅限部分驱动)。
- 原 5.0 写法:
'host' => '127.0.0.1', 'port' => 6379, 'auth' => '123456' - 5.1 正确写法:
'host' => '127.0.0.1', 'port' => 6379, 'password' => '123456', 'timeout' => 0, 'database' => 0 - 务必确认
extension=redis.so已启用,且 PHP CLI 和 Web SAPI 使用同一版本
缓存调用方式兼容处理
5.1 废除了全局函数 cache() 的自动驱动切换逻辑,改为强依赖配置驱动。原来 cache('user_123', $data) 可能走 file 或 redis,现在必须显式指定驱动或确保 default 配置正确。
立即学习“PHP免费学习笔记(深入)”;
- 保持兼容:在控制器中仍可写
cache('key', $value),但前提是config/cache.php中'default'对应的驱动已正确初始化 - 推荐显式调用:
Cache::store('redis')->set('key', $value, 3600),避免因配置疏漏导致缓存写入错误驱动 - 检查
think\facade\Cache是否正常加载,若报类不存在,需确认composer dump-autoload -o已执行
运行时缓存目录与权限
5.0 的 runtime/cache/ 目录在 5.1 中仍有效,但框架默认会尝试创建 runtime/cache/driver_name/ 子目录(如 runtime/cache/redis/)。若目录不可写,Redis 驱动会自动退化为 file,并可能不报错。
- 升级后首次运行前,清空 runtime/ 目录(特别是 cache/ 和 log/ 子目录)
- 确保 web 用户对 runtime/ 有读写权限,Linux 下常用
chown -R www:www runtime/ - 可通过
php think optimize:cache手动触发缓存配置编译,验证是否加载成功



















