thinkphp 6 默认不支持 redis 缓存驱动,需安装 topthink/think-redis 扩展;配置仅支持 host/port 参数,不支持 redis:// url;自动添加 think: 前缀且可配置;须启用 persistent 长连接与 pool_size 避免连接数耗尽。

ThinkPHP 6 默认不支持 Redis 驱动直接写 redis 配置项
TP6 的缓存配置里,type 填 redis 看似合理,但实际会报错:Cache handler not exists: redis。因为 TP6 把 Redis 缓存驱动单独抽成了扩展包,不是内置驱动。
必须先安装 topthink/think-redis 扩展,再在配置中启用它:
composer require topthink/think-redis
装完后,config/cache.php 中的 default 或自定义缓存配置才能合法使用 type => 'redis'。
- 不装扩展就配
redis,运行时直接抛异常,不是连接失败,是根本找不到类 - 扩展安装后会自动注册
RedisCache驱动,无需手动extend或bind - 如果项目已用
tp-cache或其他第三方缓存包,注意命名冲突,优先以think-redis官方包为准
Redis 连接参数必须用 host/port,不能只写 url
TP6 + think-redis 不支持 redis:// 协议 URL 形式连接(比如 redis://127.0.0.1:6379),只认传统键值对参数。
正确写法示例(config/cache.php):
'redis' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'select' => 0,
'timeout' => 0,
'expire' => 3600,
],
-
host和port是必填项;password为空字符串表示无密码,不能留空或写null -
select指定数据库编号,默认是 0,TP6 不支持用database键名(那是 Laravel 风格) -
timeout设为 0 表示永不超时,生产环境建议设成3或5,避免阻塞请求
缓存 key 自动加前缀,但 set 时不体现,get 时却要匹配
TP6 的 Redis 驱动默认会给所有 key 加上 think: 前缀(可配),但这个行为只在底层生效——你调用 Cache::set('user_123', $data),实际存的是 think:user_123;而用原生 Redis 客户端查,必须带前缀才能看到。
配置中可通过 prefix 修改:
'redis' => [
// ... 其他参数
'prefix' => 'myapp:',
],
- 前缀影响所有缓存操作,包括
remember、store、delete - 如果和其它语言服务共用 Redis,且对方没加前缀,要么统一关掉前缀(设为
''),要么对方也加相同前缀 - 前缀不参与序列化,只是字符串拼接,性能无损耗
连接池未默认开启,高并发下容易触发 Connection refused
默认配置下,每次缓存读写都会新建 Redis 连接,短连接模式在压测或高 QPS 场景下极易打满 Redis 连接数,报错:Connection refused 或 Too many open files。
必须显式启用连接池(需 Redis 扩展支持 pconnect):
'redis' => [
// ... 其他参数
'persistent' => true,
'pool_size' => 20,
],
-
persistent => true启用长连接,连接会被复用,但要注意:PHP-FPM 子进程结束时连接才释放 -
pool_size控制每个进程最多保持多少个长连接,设太高可能撑爆 Redis 的maxclients - 若 Redis 服务启用了
protected-mode yes且没设密码,pconnect可能静默失败,建议搭配密码使用
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











