必须确保phpredis扩展已加载、配置对齐、序列化方式匹配,否则cache::get()会静默返回null或抛class 'redis' not found;需验证php -m | grep redis、phpinfo()中redis版本、config/database.php设'client' => 'phpredis'、config/cache.php中store的connection与database.php键名一致,并加prefix避免key冲突。

直接用 phpredis 驱动是可行的,但必须确保扩展已加载、配置对齐、序列化方式匹配,否则 Cache::get() 会静默返回 null 或抛出 Class 'Redis' not found。
确认 phpredis 扩展已启用
这是最常被跳过的一步。Laravel 的 redis 缓存驱动默认依赖 phpredis(不是 predis),且不通过 Composer 加载——它调用的是 PHP 内置扩展。
- 运行
php -m | grep redis,输出中必须含redis(不是redis.so被注释或路径错误) - 若无输出,需安装扩展:Debian/Ubuntu 上执行
sudo apt install php-redis,然后重启 PHP-FPM 或 Apache - 检查
phpinfo()页面中 “redis” 模块是否显示,且 “Redis Version” 字段有值(如 6.2.6+)
config/database.php 中的 redis 连接必须显式指定 client
Laravel 不会自动推断你用的是 phpredis 还是 predis;client 字段必须写死,否则连接会 fallback 到 predis 并可能失败。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 打开
config/database.php,找到'redis'数组,在顶层加'client' => 'phpredis' - 确保
'default'(或你自定义的'cache')连接里包含'password'(不是REDIS_PASSWORD)、'database'(推荐设为1,避免和 session/queue 冲突) - 示例片段:
'redis' => [ 'client' => 'phpredis', 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_CACHE_DATABASE', 1), ], ],
config/cache.php 中的 redis store 必须指向正确 connection
缓存 store 和数据库连接是解耦的,connection 字段必须和 config/database.php 里的键名完全一致,否则 Cache::store('redis') 会连错库甚至静默失败。
- 在
config/cache.php的'stores' => ['redis' => [...]]块中,确认'connection'值为'default'(或你上面定义的连接名) - 务必加
'prefix',例如'prefix' => env('CACHE_PREFIX', 'laravel8:'),否则多环境/多租户下 key 会冲突 - 若想减内存占用,可加
'serialize' => 'igbinary',但前提是 PHP 已装igbinary扩展并启用(php -m | grep igbinary)
验证与避坑:Cache::remember() 在 phpredis 下容易失效的点
Cache::remember() 在 phpredis 下失效,90% 是因为序列化逻辑没对齐或模型绑定干扰,不是驱动本身问题。
- 不要缓存 Eloquent 模型实例本身——
phpredis默认用serialize(),但模型里的闭包、资源句柄、动态属性(如$appends)可能丢失;改用$model->toArray()或$model->toJson() - 禁用隐式路由模型绑定:控制器方法别写
show(User $user),改用show($id),并在remember()闭包里查库,否则查询已在缓存外执行完毕 - 清缓存别用
redis-cli flushall——它会清空整个 Redis 实例;改用php artisan cache:clear(它只清prefix下的 key)或手动Cache::store('redis')->flush()
真正卡住的地方往往不在“怎么配”,而在“谁在连、连哪、缓存什么”。phpredis 本身很快,但一旦配置错位或缓存了不可序列化的东西,表现就和 file 驱动一样慢——而且还不报错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










