Laravel8使用phpredis执行config:clear报Class "Redis" Not Found错误
问题原因
1. CLI与Web环境的PHP扩展配置不一致
你Web接口能正常调用Redis,说明Web侧(PHP-FPM/PHP-CGI)的php.ini已经加载了phpredis扩展,但artisan命令走的是PHP CLI环境,两套环境用的是独立的php.ini配置,你的CLI环境没有启用phpredis扩展。
PhpRedisConnector.php第75行的代码是直接实例化phpredis扩展提供的全局Redis类,和Laravel的Redis门面无关,因此你注释门面别名的操作对这个错误没有影响,CLI下没有安装phpredis扩展就会直接报类不存在。
2. 服务提供者中执行了非必要的Redis操作
错误栈显示该错误由AppServiceProvider中调用getCachedValue触发,Laravel执行config:clear等artisan命令时会先启动所有服务提供者,此时不需要调用配置缓存逻辑,直接在boot/register方法中执行Redis操作会额外增加CLI命令的依赖要求。
解决步骤
- 首先验证CLI环境是否安装phpredis扩展,执行命令:
php -m | grep redis
如果没有输出,执行php --ini找到CLI对应的php.ini文件,添加扩展加载配置(Linux/macOS加extension=redis.so,Windows加extension=redis.dll),重启终端后再次验证。
- 调整AppServiceProvider中的逻辑,增加CLI运行判断,避免执行artisan命令时触发Redis操作:
// App\Providers\AppServiceProvider public function boot() { // 仅非CLI环境执行缓存读取逻辑 if (! $this->app->runningInConsole()) { \App\Models\Setting::getCachedValue(); } }
内容的提问来源于stack exchange,提问作者Aayush Dahal
相关产品推荐
相关产品推荐

