Hyperf 连接池预热通过设置 min_connections>0 实现,服务启动时自动创建并维持指定数量空闲连接;Swow 环境需满足版本≥1.5.0、使用同级 pool 结构、清空 runtime/container 并重启。

Hyperf 连接池预热不是靠某个开关一键开启,而是通过启动时主动触发连接创建 + 合理配置最小连接数(min_connections)来实现的。它本质是让服务刚启动就建立一批可用连接,避免首波请求因建连延迟而变慢。
预热的核心机制是 min_connections
这个参数表示连接池初始化时主动创建并保持的最少空闲连接数。只要设为大于 0 的值,Hyperf(配合 Swow 或 Swoole)在服务启动、连接池首次被加载时,就会同步创建对应数量的连接,并维持它们处于 idle 状态,随时可取。
例如,在 config/autoload/databases.php 中:
'default' => [
'driver' => 'mysql',
// ... 其他数据库配置
'pool' => [
'min_connections' => 8, // ✅ 启动即建 8 个连接,完成“预热”
'max_connections' => 64,
'wait_timeout' => 3.0,
'max_idle_time' => 60.0,
],
],Redis 同理,在 config/autoload/redis.php 中设置:
'default' => [
'host' => '127.0.0.1',
// ... 其他配置
'pool' => [
'min_connections' => 5, // 启动时预建 5 个 Redis 连接
'max_connections' => 30,
'wait_timeout' => 2.0,
],
],注意 Swow 下的特殊要求
如果你使用的是 Swow 协程引擎(推荐且主流),必须满足以下条件,预热才真正生效:
- Swow 版本 ≥ 1.5.0,且
server.php中已设'mode' => SWOW_BASE -
删除旧版
pool的顶层写法(如pool => [ 'min_connections' => ... ]写在driver外层),改用 Swow 专用结构:pool必须与driver、host等同级 - 修改后务必清空
runtime/container/并重启服务:rm -rf runtime/container && php bin/hyperf.php start
否则旧 Pool 实例残留,min_connections不会触发新建
不需要额外代码,但可主动验证
预热过程是自动的,无需写 foreach 循环去 borrow 连接。但你可以加一段简单验证逻辑(如在 Command 或 Boot 阶段),确认连接是否就绪:
use Hyperf\DbConnection\Pool\PoolFactory;
use Hyperf\Di\Annotation\Inject;
class WarmupCommand extends Command
{
#[Inject]
protected PoolFactory $poolFactory;
public function handle()
{
$pool = $this->poolFactory->getPool('default');
echo "当前连接数: {$pool->getCurrentConnections()}\n"; // 启动后应 ≈ min_connections
echo "空闲连接数: {$pool->getConnectionsInChannel()}\n";
}
}运行 php bin/hyperf.php warmup 即可查看效果。
小结关键点
-
min_connections > 0是预热的唯一必要配置项 - Swow 环境下必须用新版 pool 结构 + 清 container + 重启
- 预热连接会持续保留在空闲队列中,直到超时(
max_idle_time)或服务关闭 - 不建议设过高(如
min_connections = 50),否则冷启动慢、资源占用大;按日常低峰并发的 1.5–2 倍设较稳妥
不复杂但容易忽略细节。


















