直接运行 composer require predis/predis 即可使用,它是纯 PHP 实现,支持 PHP 8.1+ 和 Redis 7,新版默认启用连接池与管道优化;老项目需 PHP 7.2 或 Redis 5 以下才指定 ^1.1。

直接运行 composer require predis/predis 就行
别折腾 php.ini、pecl 或 redis.so——predis/predis 是纯 PHP 实现,装完就能用。它支持 PHP 8.1+ 和 Redis 7,新版默认启用连接池与管道优化。老项目卡在 PHP 7.2 或 Redis 5 以下,才需要指定 ^1.1。
常见错误:Class 'Predis\Client' not found 不是没装好,而是自动加载失效:
- 先跑
composer dump-autoload,尤其改过composer.json的autoload段后 - 确认没在 PSR-4 规则里把
vendor/目录包含进去(会覆盖 Composer 默认加载) - CI/CD 环境用
composer install --no-dev,但本地开发别加这个参数,否则可能漏掉调试依赖 - 检查
require 'vendor/autoload.php'路径是否拼错——比如写成require './vendor/autoload.php'在某些 CLI 工作目录下会失败
Predis\Client 初始化时键名必须全小写
填错字段名不会报错,而是静默退回到默认值,比如 timeout 写成 Timeout,实际连接超时变成 0,请求卡死:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 必须小写的配置项:
timeout、read_write_timeout、retry_interval - 标准字段:
scheme、host、port、password、database - 密码含
@或/得先rawurlencode(),再拼进password字段,否则解析截断 - 集群模式不能只传一个地址,得用数组:
['tcp://127.0.0.1:7000', 'tcp://127.0.0.1:7001'],并显式设'replication' => 'predis'或'cluster' => 'redis'
$client->get() 返回 null 不代表出错
null 是正常返回值,只表示 key 不存在;它和连接失败、认证失败、命令拒绝完全无关:
- 连通性必须单独验证:
$client->ping()返回+PONG才算真正通了 - 捕获异常要用
Predis\Connection\ConnectionException,不是泛捕Exception - 如果
get()返回null但业务逻辑预期一定有值,优先查 Redis 侧是否真没写入——用MONITOR命令看客户端发了啥 key(注意空格、大小写) - 管道(
pipeline)模式下,get()返回的是结果数组里的对应位置值,不是单个字符串——别直接echo
框架里配 Redis 缓存容易漏掉的关键动作
Laravel、ThinkPHP、Yii 等框架里,光装包、改配置还不够:
- Laravel:改完
config/database.php或.env后,必须执行php artisan config:clear,否则新配置不生效 - ThinkPHP:需单独装
topthink/think-redis驱动包,并在config/cache.php显式定义redisstore 段,不能只改default - Yii:配置里
'class' => 'yii\redis\cache'依赖已加载的yii2-redis包,但最终仍走 PHP Redis 扩展或 Predis —— 若用后者,得确保Predis\Client可实例化 - 所有框架都得确认:Redis 服务本身在运行(
redis-cli ping)、网络可达、密码和 database 正确、ACL 权限足够(Redis 6+ 默认default用户无权限)
最常被跳过的一步:没验证 ping() 就直接读写,结果 null 当错误处理,掩盖了真实的连接超时或认证失败。

















