ThinkPHP 5 配置 Redis 缓存需三步:一装对 phpredis 扩展并重启服务;二在 config/cache.php 中严格配置 'default'=>'redis' 及 'stores.redis' 下的 type(小写)、host、port、password(空字符串)等必填项;三用命令行 cache() 测试和 redis-cli 查 key 双重验证。

ThinkPHP 5 配置 Redis 缓存,核心就三件事:装对扩展、写对配置、验得真实。漏掉任何一环,Cache::get() 都可能返回 null,还查不出错在哪。
确认 PHP redis 扩展已启用
TP5 依赖原生 phpredis 扩展,不认 Predis 或其他纯 PHP 实现。
- 终端执行
php -m | grep redis,必须看到redis输出 - 没输出?Linux/macOS 运行
pecl install redis,Windows 下下载匹配 PHP 版本(TS/NTS、VC 编译器)的php_redis.dll,放进ext目录 - 编辑
php.ini,添加或取消注释:extension=redis.so(Linux/macOS)或extension=php_redis.dll(Windows) - 改完必须重启 PHP-FPM 或 Web 服务(如 Nginx/Apache),再执行一次
php -m | grep redis验证
在 config/cache.php 中正确填写 Redis 配置
TP5.0/5.1 的缓存配置必须放在 config/cache.php,不是 config.php;写错位置等于没配。
- 新建或打开
config/cache.php,返回数组,不要追加到其他文件 - 若只用 Redis,设
'default' => 'redis';若多驱动共存,需用'type' => 'complex'并定义'stores' => ['redis' => [...]] -
'redis'子配置中,以下字段缺一不可且大小写敏感:'type' => 'redis'(小写)、'host'、'port'、'password' => ''(空密码也要写空字符串,不能省略或写null) - 推荐加上:
'timeout' => 3(防阻塞)、'prefix' => 'app_'(防 key 冲突)、'serialize' => 'json'(比默认 serialize 更轻量)
验证 Redis 是否真被框架调用
别信配置写了就生效,实测才是关键。
立即学习“PHP免费学习笔记(深入)”;
- 命令行快速测试:
php -r "var_dump(cache('test_key', 'ok', 60));",再执行php -r "var_dump(cache('test_key'));"—— 两次都输出string(2) "ok"才算通 - 如果第二次是
null,说明框架仍在 fallback 到 file 驱动,重点回头检查type大小写和扩展是否真加载 - 登录 Redis 服务器执行
redis-cli keys "app_test_key",能查到 key 才算真正写入成功
注意几个高频踩坑点
这些细节看似小,却常让配置卡住一整天。
-
cache.php里'type' => 'Redis'或'REDIS'→ 驱动注册失败,必须小写'redis' - Redis 密码为空时写成
'password' => null或直接删掉该字段 → 配置解析失败,缓存静默失效 - 用
Cache::set()却没指定 store,而'default'指向的是 file → 实际走的是文件缓存,不是 Redis - 开发环境开了 OPcache 或 APCu,修改了配置但没清 OPCache → 看似改了,实际读的还是旧配置



















