hyperf 配置 redis 连接池空闲连接数需协同设置 idle_check_interval 和 max_idle_time,二者缺一不可;推荐值分别为 30 秒和 300 秒,且必须置于 'pool' 配置项下;swow 环境还需指定 swowhandler 驱动并升级 hyperf/redis 至 v3.2.5+。

Hyperf 配置 Redis 连接池空闲连接数阈值,关键不在于“设一个空闲数上限”,而在于通过 空闲检查频率 + 空闲超时时间 的组合机制,间接控制池中空闲连接的数量。redis-py(Hyperf 底层依赖)本身没有 max_idle_connections 这类直接参数,必须靠两个协同参数生效。
必须同时配置 idle_check_interval 和 max_idle_time
只设其中一个等于没设 —— 这是空闲连接不回收的最常见原因。
-
idle_check_interval:单位秒,表示连接池多久扫描一次,检查哪些连接已空闲超时。推荐设为
30或60 -
max_idle_time:单位秒,定义单个连接空闲多久后应被回收。推荐设为
300(5 分钟)或600(10 分钟) - 二者关系要合理:比如
idle_check_interval=60但max_idle_time=10,那每次检查时连接还没到 10 秒就被扫到了,结果所有空闲连接都立刻被回收;反过来若max_idle_time=300却设idle_check_interval=3600,那就得等一小时才清理一次,池里可能积压大量无效空闲连接
在 config/autoload/redis.php 中正确写法
以名为 default 的 Redis 实例为例,在其 'pool' 配置块内添加:
'pool' => [
'min_connections' => 2,
'max_connections' => 20,
'wait_timeout' => 2.0,
'idle_check_interval' => 30,
'max_idle_time' => 300,
],
注意:idle_check_interval 和 max_idle_time 必须放在 'pool' 数组下,不是顶层配置,也不是 'options' 里。
Swow 环境需额外确认驱动适配
如果你用的是 Swow 协程引擎,仅配上述参数还不够。Hyperf 默认 Redis 客户端在 Swow 下无法复用连接池,会导致每个请求新建 TCP 连接,空闲管理完全失效。
- 确保已升级
hyperf/redis至v3.2.5+ - 在对应 Redis 配置块中显式指定 Swow 驱动:
'handler' => \Hyperf\Redis\Handler\SwowHandler::class - Swow 驱动才能真正识别并执行
idle_check_interval和max_idle_time
验证空闲连接是否按预期回收
上线后可通过以下方式观察效果:
- 用
redis-cli执行CLIENT LIST,看连接数是否随流量下降而回落 - 监控 Hyperf 的
redis.pool.connections.idle指标(需接入 Prometheus + Grafana) - 日志中搜索
"idle connection closed"类提示(开启 debug 日志级别可看到)











