ThinkPHP 8 配置 Redis 缓存必须显式填全 config/cache.php 中 host、port、database、type 四项,漏一项即静默降级为 file 驱动;需启用 phpredis 扩展、安装 topthink/think-redis 包,并通过 ping 或 set/get 验证真实连接。

在ThinkPHP8中配置Redis缓存,不是改个.env开关就完事——漏填host、port、database中的任意一项,缓存就会静默降级为file驱动,接口响应时间忽高忽低,Cache::get()始终返回null,而日志里连错误都找不到。
确认PHP环境已加载redis扩展
执行php -m | grep redis,终端必须输出redis;若无,说明扩展未启用。
Linux下运行sudo apt-get install php-redis(Debian/Ubuntu)或sudo yum install php-pecl-redis(CentOS/RHEL);Windows需下载对应PHP版本的php_redis.dll,放入ext目录,并在php.ini中添加extension=php_redis.dll。
【改完php.ini务必重启PHP-FPM或Web服务器】,否则扩展永远不生效。
立即学习“PHP免费学习笔记(深入)”;
安装官方Redis适配包
项目根目录执行:composer require topthink/think-redis。
检查vendor/topthink/think-redis/src/Provider.php是否存在——该文件是驱动注册的关键,缺失则报Driver [redis] not supported。
若使用Swoole或自定义CLI命令,需手动调用ThinkRedisServiceProvider::register(),否则服务提供者不会被加载。
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
配置config/cache.php:四个字段缺一不可
第一步:将'default' => 'redis'设为小写redis,不能写Redis或REDIS。
第二步:在'stores' => ['redis' => []]数组内,必须显式填写以下四项:
• 'type' => 'redis'(固定字符串)
• 'host' => '127.0.0.1'(不能留空、不能注释、不能依赖“默认值”)
• 'port' => 6379(必须为整型,写成'6379'会失败)
• 'database' => 0(必须指定整数,不写会导致部分命令报错)
第三步:根据Redis版本决定密码字段——Redis ≥6.0且启用ACL时,用'auth' => 'your-pass';传统模式用'password' => 'your-pass';空密码也必须写'',不能省略。
第四步:强烈建议补全'timeout' => 3.0(避免阻塞)、'prefix' => 'app_v2_'(防键冲突)、'serialize' => 'json'(比php_serialize更轻量)。
验证Redis是否真实生效
方法一:进入Tinker环境:php think tinker → 执行(new \think\cache\driver\Redis(config('cache.stores.redis')))->handler()->ping(),返回+PONG才算通。
方法二:写一行测试代码:Cache::store('redis')->set('test_key', 'test_value', 60); var_dump(Cache::store('redis')->get('test_key'));,输出string(12) "test_value"才表示缓存读写正常。
注意:如果Cache::set()返回true但get()返回null,大概率已静默降级为file驱动,立刻回查前三个步骤。


















