cache::get()返回null、set()不生效或报driver not supported,说明redis连接未通,核心原因在php扩展未加载、tp5配置不规范(type必须小写redis、password不能为空字符串)或未显式调用cache::store('redis')。

Cache::get() 返回 null、Cache::set() 不生效、或报错 Driver not supported,基本可以断定连接没通——不是代码写错了,而是配置链或环境层断在了某一处。下面分三步直击关键点。
确认 PHP redis 扩展已加载且版本兼容
ThinkPHP5 只认原生phpredis 扩展,不支持 Predis 或其他纯 PHP 实现。
- 运行 php -m | grep redis,终端必须输出 redis;没输出就说明扩展根本没加载。
- Windows 用户注意:必须下载与当前 PHP 版本严格匹配的 php_redis.dll(区分 TS/NTS、VC15/VC17、x64/x86),放进 ext 目录后,在 php.ini 中加一行:extension=php_redis.dll。
- Linux/macOS 用户用 pecl install redis 安装后,php.ini 中要写:extension=redis.so。
- 修改完 php.ini 后,必须重启 PHP-FPM 或 Apache/Nginx,再执行 php -m | grep redis 验证,否则后续全白搭。
检查 config.php 中 cache 配置是否符合 TP5.0 规范
TP5.0 的缓存配置统一放在application/config.php 的 'cache' => [] 区块里,不是 config/cache.php。常见错误包括:
- 'type' 写成 'Redis' 或 'REDIS' —— 必须是小写 'redis',否则驱动注册失败。
- 'password' 字段设为 null 或直接删掉 —— 即使 Redis 没设密码,也得保留空字符串:'password' => ''。
- 忘记配 'host' 和 'port',或填了内网不可达地址(比如填成 192.168.1.100 但服务跑在本地)。
正确示例:
'cache' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'timeout' => 20,
'expire' => 3600,
'prefix' => 'think:',
],
用 Cache::store('redis') 显式调用并验证真实写入
TP5.0 默认不自动切换到 redis 驱动,即使配置了'type' => 'redis',也要显式指定 store 才能走 Redis。
- 错误写法:Cache::set('key', 'val') —— 这走的是默认驱动(通常是 file)。
- 正确写法:Cache::store('redis')->set('test_key', 'tp5_redis_ok', 60),然后 echo Cache::store('redis')->get('test_key')。
- 若返回 null,优先查 php -m | grep redis 和配置中 type 大小写;若报 Connection refused,说明 Redis 服务没起来或端口被防火墙拦了;若报 AUTH failed,核对 password 值是否和 Redis 配置完全一致(含空格、大小写)。
- 终极验证:用 redis-cli 连上后执行 keys *think*,能看到带前缀的 key 才算真正写进去了。
最常被忽略的一点:TP5.0 不会因为你在 config.php 里写了 'type' => 'redis' 就自动把所有 Cache::xxx() 调用路由过去——你得手动加 ->store('redis'),否则它永远默默 fallback 到 file 驱动。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











