ThinkPHP 5.1 的 Redis 缓存配置必须写在 config/cache.php 中,返回严格结构的数组:type 必须为 'redis'(小写),host、port、password(空也需写'')、select(整数)缺一不可,否则静默失效。

ThinkPHP 5.1 的 Redis 缓存配置必须写在 config/cache.php 文件中,不能放在 app.php 或其他配置文件里。这个文件需返回一个 PHP 数组,且结构要严格匹配框架要求——配错字段名、类型或缺失必填项,都会导致缓存静默失效(Cache::get() 返回 null,无报错提示)。
基础单驱动配置(推荐新手用)
适用于只使用 Redis 一种缓存的项目,简洁明确:
-
type 必须为
'redis'(全小写,大小写敏感) -
host 和 port 必须显式写出,即使本地也别省略;Docker 环境注意改用
host.docker.internal或宿主机 IP -
password 即使为空,也要写
'',不能省略或写null -
select 是整数(如
0),不能写字符串"0" -
prefix 建议设非空值(如
'tp51_'),避免多项目共用 Redis 时键冲突 -
expire 单位是秒;
0表示永不过期,但生产环境慎用;建议设为正整数(如3600)
示例 config/cache.php:
return ['type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'select' => 0,
'prefix' => 'tp51_',
'expire' => 3600,
];
复合缓存配置(支持多 store 切换)
适合需要同时用 File(调试)和 Redis(线上)的场景,通过 Cache::store('redis') 显式调用:
- 顶层
'type'必须为'complex' -
'default'指定默认 store 名(如'redis'),否则Cache::set()会走 file 或空实现 - 每个 store(如
'redis'、'file')必须独立定义完整参数,不能复用顶层字段 - Redis store 内仍需包含
'host'、'port'、'password'、'select'等全部连接项
示例:
return ['type' => 'complex',
'default' => 'redis',
'stores' => [
'redis' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'select' => 0,
'prefix' => 'tp51_redis_',
'expire' => 3600,
],
'file' => [
'type' => 'file',
'path' => '../runtime/cache/',
'prefix' => 'tp51_file_',
'expire' => 3600,
],
],
];
关键验证点(写完必须检查)
配置不是保存就完事,这几项不确认,缓存大概率不工作:
- PHP 是否已加载
redis扩展?运行php -m | grep redis验证 - Redis 服务是否正在运行?可执行
redis-cli ping看是否返回PONG - 键名是否合法?避免空格、中文、斜杠;建议统一用
md5($key)或仅含字母数字下划线 - 调用方式是否匹配配置?若用了
Cache::store('redis'),但配置里没定义'redis'这个 store 名,就会 fallback 到默认(可能是 file) - 开发时临时加
'timeout' => 3(单位秒),防止 Redis 不可用时请求卡死
测试是否生效的小方法
在控制器或命令行中快速验证:
- 执行
Cache::set('test_key', 'hello_redis', 60) - 再执行
var_dump(Cache::get('test_key'));—— 应输出string(12) "hello_redis" - 若返回
null,立即检查上述验证点,不要怀疑代码逻辑 - 登录 Redis 终端,执行
keys tp51_*(按你设的 prefix),看是否有对应 key 生成
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











