ThinkPHP配置Redis缓存生效需四步:一确认PHP redis扩展启用并重启服务;二安装think-redis包且手动注册服务提供者;三严格配置cache.php中stores.redis字段(type小写、select整数、password显式为空、host/port正确);四通过命令行或redis-cli验证数据真实写入。

ThinkPHP新手配置缓存驱动时,最常卡在看似写对了却完全不生效的环节——Cache::get()始终返回null、日志里没报错、redis-cli查不到key,其实是因为驱动压根没加载成功,而错误被框架静默吞掉,连warning都不抛。
第一步:确认PHP扩展已真正启用
运行php -m | grep redis,输出必须含redis;若无,说明扩展未加载,不是配置问题,别急着改config/cache.php。
Linux下装完扩展后必须重启PHP-FPM和Web服务器(如Nginx),否则CLI环境能识别、Web请求仍报Class 'Redis' not found。
Windows用户注意:【extension=php_redis.dll必须写在php.ini的[ExtensionList]区块之后,且路径不能含中文或空格】;装错PHP版本对应的dll(比如PHP 8.3用了PHP 7.4的dll),会导致类根本不可用。
立即学习“PHP免费学习笔记(深入)”;
第二步:驱动注册缺一不可
ThinkPHP 6+默认不带Redis驱动类,composer require topthink/think-redis是硬性前置条件,漏装就必然报Driver [redis] not supported。
装完后检查vendor/topthink/think-redis/src/Driver.php是否存在——不存在说明Composer安装失败或autoload未刷新,运行composer dump-autoload补救。
若项目用了Swoole或自定义命令行入口,【服务提供者不会自动注册,必须手动调用ThinkRedisServiceProvider::register()】,否则HTTP请求能用,CLI任务直接崩。
第三步:config/cache.php里四条命脉
只改'default' => 'redis'不够,stores.redis块必须完整存在且字段严格匹配:
① 'type' => 'redis'必须全小写,写成'Redis'或'REDIS'即失效;
② 'select' => 0必须是整数,写成'select' => "0"会静默连接失败,无任何提示;
③ 'password' => ''即使Redis没设密码也得显式写出,留空或写null会导致AUTH拒绝;
④ 'host'和'port'要与实际服务一致:Docker环境别写localhost(它指向容器自身),该换host.docker.internal或宿主机IP。
第四步:验证缓存是否真走Redis
方法一:用命令行快速验证
执行php -r "var_dump(cache('test_key', 'test_val', 10));" → 返回true;再执行php -r "var_dump(cache('test_key'));" → 必须返回string(9) "test_val",两步都通才算活。
方法二:关前缀直连redis-cli
在config/cache.php的stores.redis里加'prefix' => '',然后终端执行redis-cli get test_key,有返回值才证明数据真进了Redis。
注意:如果redis-cli keys "*"查不到key,但命令行验证又成功,大概率是prefix没关——ThinkPHP默认加think:前缀,你查的是裸key。



















