最近接手一个老系统,其中有部分逻辑是通过脚本去完成的。
核心逻辑大概是这样:
<?php
$db = new Mysqli($db_host, $db_user, $db_password);
function doSomething($db){
// 查询符合条件的数据
if($exists){
// todo
}
}
while(true){
doSomething($db);
}
这个脚本基本上是 7x24 小时在那里工作。
暂且不讨论这种处理方式是否合理,我想请问:
- 如果长期占用一个连接不释放,会导致什么问题吗?
- 上面的场景是否需要使用连接池?
1 不会有啥问题,但是要注意 mysql 的 wait_timeout 的值,脚本里面不要出现大于这个时间的空闲,免得服务端主动断开连接,所以,你可以在里的 doSomething 逻辑开始,加个连接判断,发送个 ping 命令过去,看看连接是否还能用,不能用了就重建连接.
2 不需要,简单的 php cli 程序,以单进程的方式运行,你的脚本也已顺序的方式执行,你有没有使用多线程处理,那么连接池就没有任何意义,因为就算是你做了连接池,这个进程里也就一个连接在活跃,如果你使用 swoole 以及相关技术的话,那就需要连接池了.