thinkphp 5 默认不内置 predis 支持,需手动引入并配置直连;推荐通过 config.php 统一管理连接参数,再封装 redisclient 类复用,其与 cache::store('redis') 互不兼容。

ThinkPHP 5 默认不内置 Predis 支持,但可以手动引入并配置使用——关键在于绕过原生 redis 驱动,改用 Predis 客户端直连,适用于需要密码认证、高版本 Redis 特性或兼容性要求较高的场景。
安装 Predis 并确认可用
Predis 是纯 PHP 实现的 Redis 客户端,无需编译扩展,跨平台兼容性好。
- 在项目根目录执行:composer require predis/predis:^1.1
- 安装完成后,可在控制器中快速验证是否加载成功:
// 示例:测试连接$client = new \Predis\Client(['scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '']);echo $client->ping() === 'PONG' ? 'OK' : 'Failed';
配置 Predis 连接参数(推荐集中管理)
不要直接在每个控制器里写死连接参数,建议统一配置再复用。
- 在 application/config.php 中新增一段配置,例如:
'predis' => ['scheme' => 'tcp','host' => '127.0.0.1','port' => 6379,'password' => '', // 有密码请填字符串,不可为 null'database' => 0,'timeout' => 2.0,'read_write_timeout' => 2.0,], - 后续可通过
config('predis')获取该配置,避免硬编码
封装一个可复用的 Predis 工具类
新建 application/common/library/RedisClient.php:
- 内容示例:
namespace app\common\library;use Predis\Client;class RedisClient {protected $client;public function __construct($config = []) {$this->client = new Client($config ?: config('predis'));}public function get($key) { return $this->client->get($key); }public function set($key, $value, $ttl = 0) {return $ttl > 0 ? $this->client->setex($key, $ttl, $value) : $this->client->set($key, $value);}public function del($key) { return $this->client->del($key); }} - 使用时:
$redis = new \app\common\library\RedisClient();$redis->set('user:1001', json_encode(['name'=>'Tom']), 3600);dump($redis->get('user:1001'));
注意与原生 Cache:: 的区别
使用 Predis 封装类后,它和 ThinkPHP 自带的 Cache::store('redis') 是两套独立逻辑:
-
Cache::走的是框架内置驱动,依赖 phpredis 扩展,且 type 必须设为 'redis'(小写) - Predis 封装类是直连客户端,不经过 TP 缓存驱动层,适合需要精细控制命令(如 pipeline、eval、hash tag)、调试连接或临时绕过缓存配置限制的场景
- 若想让
Cache::也走 Predis,需自定义缓存驱动类并注册,TP5 原生不支持,操作较重,一般不推荐
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











