thinkphp 5 支持复合缓存(type=>'complex'),需在config.php中配置default、file、redis等标识,通过cache::store('redis')->set()等方式按需切换驱动,type值必须全小写,redis扩展须启用且密码字段不可省略。

ThinkPHP 5 支持复合缓存(complex)模式,允许你同时配置文件缓存和 Redis 缓存,并按需切换或设置主备策略。关键不是“两个一起用”,而是通过 type => 'complex' 显式启用多驱动管理,再分别定义 default、file、redis 等缓存标识。
配置位置与基本结构
在 ThinkPHP 5.0/5.1 中,该配置通常写在 application/config.php 文件的 'cache' => [] 区块内(不是单独的 config/cache.php)。结构必须是:
-
type 设为
'complex'(小写,不可拼错) -
default 指定默认使用的缓存标识(如
'file'或'redis') -
file 和 redis 是两个独立的子配置,各自声明
'type'和连接参数
完整可运行的配置示例
以下为推荐写法(已适配 TP5.0/5.1,无语法错误):
'cache' => [
'type' => 'complex',
'default' => 'file', // 默认走 file;也可设为 'redis'
'file' => [
'type' => 'File',
'path' => RUNTIME_PATH . 'cache/',
'prefix' => 'file_',
'expire' => 3600,
],
'redis' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'select' => 0,
'timeout' => 20,
'expire' => 3600,
'prefix' => 'redis_',
],
],
如何在代码中使用不同缓存
不修改配置的前提下,可通过 store() 方法动态指定驱动:
-
Cache::set('key', 'value', 300);→ 使用default配置(当前是 file) -
Cache::store('redis')->set('key', 'value', 300);→ 强制走 Redis -
Cache::store('file')->get('key');→ 明确读取文件缓存
适合场景:高频读接口优先查 Redis,查不到再查 DB 并回填 Redis;低频或大体积数据存 File 避免 Redis 内存压力。
注意事项与常见踩坑点
这些细节不对,就会静默退化为 file 或报错:
-
'type' => 'redis'必须全小写,写成'Redis'或'REDIS'会导致驱动加载失败 - Redis 扩展必须已启用:
php -m | grep redis有输出,且 Web 服务已重启 - 密码字段即使为空也要保留
'password' => '',不能省略或写成null - 若想实现「先 Redis 后 File」的自动降级,TP5 原生不支持自动 fallback,需手动编码判断
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











