新手配置ThinkPHP Redis缓存需四步:启用phpredis扩展并重启服务、安装topthink/think-redis包、在.env设CACHE_DRIVER=redis且config/cache.php中stores.redis完整配置(type小写、select为整数、password显式声明)、关闭prefix便于调试,缺一即导致Cache::get()返回null或Driver not supported。

新手第一次配置ThinkPHP缓存驱动时,常因忽略环境依赖、配置层级错位或键值语义误解,导致Cache::get()静默返回null、Driver [redis] not supported报错,甚至误以为代码逻辑出错而反复调试业务层。
PHP扩展没装或没启用
运行php -m | grep redis,输出为空说明phpredis扩展根本没加载;Windows用户必须打开phpinfo()页面确认redis模块存在。
Linux/macOS下执行pecl install redis后,要在php.ini里加extension=redis.so;Windows则需放对版本的php_redis.dll并写extension=php_redis.dll。
【重启PHP-FPM和Web服务器是硬性要求】,只改php.ini不重启,扩展永远不生效——很多新手卡在这一步长达数小时。
立即学习“PHP免费学习笔记(深入)”;
装错扩展版本(比如PHP 8.3装了PHP 7.x的dll)会直接触发Class 'Redis' not found,且不会提示具体原因。
Composer包漏装或装错
ThinkPHP 6默认不带Redis驱动类,必须执行composer require topthink/think-redis,不是predis/predis也不是phpredis/phpredis。
装完检查vendor/topthink/think-redis/src/Driver.php是否存在,不存在说明自动加载失败,得手动验证composer dump-autoload。
如果用Swoole或命令行任务,还要确认ThinkRedisServiceProvider已被注册,否则容器里根本找不到RedisCache类。
配置文件改错位置
第一步:打开.env文件,把CACHE_DRIVER=redis写进去——这是最高优先级入口,改config/cache.php却不动.env,重启后照样走file驱动。
第二步:打开config/cache.php,确认'default' => 'redis'是全小写字符串,写成'Redis'或'REDIS'就失效。
第三步:在'stores' => []里补全redis块,字段缺一不可:'host'、'port'、'password' => ''(空密码也得显式写)、'select' => 0(必须是整数,不能是字符串"0")。
第四步:删掉runtime/cache/目录,否则旧缓存配置可能被自动加载缓存住,改完配置也不生效。
缓存键和过期时间的语义陷阱
方法一:键名含空格、斜杠或中文,在file驱动下会生成非法文件名,写入失败却无报错;统一用md5($key)或只含字母数字下划线的命名最稳妥。
方法二:传cache('key', $val, 0)不是永不过期,而是立即删除——等价于cache('key', null);真要永久存,必须传null。
方法三:Redis里查不到key?先关掉'prefix' => 'think:',改成'prefix' => ''再用redis-cli get key验证,否则实际存的是think:cache:key。
连接参数填错导致超时卡死
redis.host别写127.0.0.1,改用localhost(避免IPv6解析延迟)或明确写127.0.0.1:6379。
必须加redis.timeout=3和redis.read_timeout=3,否则默认-1(阻塞等待),高并发下整个请求卡死。
如果Redis开了密码,redis.password必须是非空字符串,空字符串会被当成无密码处理,AUTH直接失败。



















