phpredis扩展未加载是Cache::get()报Class 'Redis' not found的首要原因,需通过php -m | grep redis验证,未输出则须安装扩展并重启Web服务器,且不可用predis替代。

phpredis 扩展没加载,Cache::get() 直接报 Class 'Redis' not found
这是最前置的拦路虎。Laravel 6.x 默认不强制要求 phpredis,但一旦你在 config/database.php 里写了 'client' => 'phpredis',而 PHP 没装这个扩展,就会炸。
- 运行
php -m | grep redis,确认输出里有redis(不是predis) - 没输出?去装:Linux/macOS 下用
pecl install redis,然后在php.ini加extension=redis.so;Windows 请下载对应 PHP 版本的php_redis.dll - 改完
php.ini必须重启 PHP-FPM 或 Apache/Nginx,否则php -m看不到 - 别信
composer require predis/predis能“替代”——它和 phpredis 是两套实现,不能混用
config/database.php 的 redis.default.client 和序列化行为强绑定
phpredis 在 Laravel 6.x 中默认使用 igbinary 序列化(如果扩展已启用),而 Predis 用的是 serialize()。两者不互通,put() 用 phpredis 写进去,get() 用 predis 读出来就是 null。
- 确认
config/database.php中'redis' => ['client' => 'phpredis']明确写出,不要留空或写成'predis' - 检查
php --ri redis输出里是否有igbinary support => enabled;如果没有,且你又没手动关掉,phpredis 会 fallback 到serialize(),但行为不稳定 - 统一策略:要么全用 phpredis + igbinary(推荐),要么全用 predis;不要在同一个项目里混配
client值 -
config/cache.php里不用、也不能配置序列化方式——它完全继承database.php中 phpredis 的底层行为
Cache::get() 总是返回 null,但 redis-cli 能查到 key
这基本锁定是序列化解析失败。phpredis 存的二进制数据,被 Laravel 缓存层误当成字符串解码,或者反过来了。
- 进
php artisan tinker,执行:Cache::store('redis')->put('test_ser', ['a' => 1], 60),再Cache::store('redis')->get('test_ser') - 如果返回
null,但redis-cli get "laravel_cache:test_ser"返回一串乱码(非 JSON),说明序列化生效了,但读取端没对上 - 临时关闭 igbinary 验证:在
config/database.php的redis.default数组里加'options' => [Redis::OPT_SERIALIZER => Redis::SERIALIZER_PHP] - 注意:这个选项只对 phpredis 有效,
Redis::SERIALIZER_PHP对应原生serialize(),兼容性最好
缓存 key 前缀和数据库索引不隔离,导致 flushAll() 误伤
Laravel 6.x 不自动加前缀,也不区分 cache/session/queue 使用的 database 索引。你调 php artisan cache:clear,其实只是删 config/cache.php 里 stores.redis.connection 指向的那个 DB 的所有 key —— 如果你没单独配 database,就和 session、queue 共用 DB 0,清缓存等于清队列任务。
- 在
config/database.php里为缓存单独开一个连接,比如叫'cache',并设'database' => 1 - 同步改
config/cache.php的'stores.redis.connection' => 'cache' - 再加
'prefix' => 'cache:'到config/cache.php的stores.redis下,避免 key 名冲突 - 别手贱跑
redis-cli -n 1 flushdb,除非你真想清光那个库
Laravel 6.x 的 phpredis 序列化本质是「扩展级开关」,不是 Laravel 配置项;最容易被忽略的是 php.ini 里没启 igbinary 却又依赖它,或者 config:clear 后忘了 config:cache,导致旧配置还在内存里跑。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











