应切换为phpredis,因其是c扩展,性能更高、内存更省,laravel 9+默认使用,10+已移除predis兼容;需同步配置redis_client=phpredis、session_driver=redis,并确保php已启用phpredis扩展。

为什么切 phpredis 而不是用 predis
phpredis 是 C 扩展,性能更高、内存更省,Laravel 9+ 默认已切到 phpredis 客户端;如果你还在用 predis,composer require predis/predis 会引入纯 PHP 实现,但遇到高并发或大体积缓存时容易触发超时或序列化失败。另外,Laravel 10+ 已彻底移除对 predis 的默认兼容支持,现在不切迟早要改。
必须同时改两个配置项:SESSION_DRIVER 和 REDIS_CLIENT
只改 SESSION_DRIVER=redis 不够,Laravel 会尝试加载 Predis\Client 类——而你没装 predis,就会报 Class "Predis\Client" not found。关键动作是同步指定客户端类型:
-
.env中设:REDIS_CLIENT=phpredis -
.env中确认:SESSION_DRIVER=redis(Session 驱动才真正走 Redis) -
config/database.php中的'client' => env('REDIS_CLIENT', 'phpredis')必须与 .env 一致,不能留空或写错大小写
PHP 必须已启用 phpredis 扩展,否则静默失败
光配对了配置,PHP 进程里没扩展,Laravel 会 fallback 到 file 驱动,且不报错——你看到 Cache::get() 返回 null、Session 不持久,其实根本没连 Redis。
- 命令行验证:
php -m | grep redis,有输出才说明扩展已启用 - 如果没输出,Linux 下用
pecl install redis,然后在php.ini加extension=redis.so - Docker 用户注意:Sail 默认已装好,但自定义镜像需显式安装,否则容器内
php -m查不到redis - Windows 用户请确认
php_redis.dll已放入ext/目录,且php.ini启用了它
redis.default 数据库号别和 cache/session/queue 冲突
phpredis 客户端本身不校验 database 值是否合法,连得上但写不进、读不出是常态。比如 session 和 cache 都往 database 0 写,互相覆盖就丢数据。
-
config/database.php中'default'用于 Session 和通用 Redis 操作,建议固定为database => 0 -
'cache'连接块必须显式设database => 1(或其它非 0 值),避免和 Session 混用 -
.env中补上REDIS_CACHE_DB=1,确保config/database.php能正确读取 - 别依赖
redis-cli SELECT 1测试——Laravel 的连接是独立的,每个连接初始化时才带 database 参数
REDIS_CLIENT=phpredis 后没重启 PHP-FPM 或 Sail 容器,导致配置缓存未刷新,旧的 predis 尝试逻辑还在运行。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











