大家都知道php 是没有进程池和连接池。 但是mysql是支持长连接的,我们php可不可以用长连接的方式来连接数据库呢?

我们通常认为用pdo的方式连接mysql开启长连接实现提升效率:PDO::ATTR_PERSISTENT => true;

查看效果: mysql-cli > show processlist;

直接上结论:

  1. cli下执行php,长连接无效,cli下脚本一退出,连接即释放

  2. apche+mod_php不开启mpm模块的话,无论mysql mysql_pconnect、pdo_mysql长连接, 页面访问完毕, mysql连接即释放。

  3. apche+mod_php开启mpm模块(worker模式)的话,无论mysql mysql_pconnect、pdo_mysql长连接, 页面访问完毕, mysql连接+1,直到达到最大的mysql连接数,不在增加,但是访问页面还是可以复用连接查询到相应数据。

4. nginx+php-fpm下mysql长连接基本无效果。

由于现在我们基本上都用lnmp的架构,apache用的比较少了。 所以用长连接的方式提升效率的意义基本不成立。

唯一可用实现连接池的方式是用swoole实现php连接池, 但这种比较麻烦。 这个可能是比较鸡肋的地方。

php 对应的生命周期:

  1. php 命令行生命周期

2.多进程php-fpm方式生命周期

文章来源于互联网:为什么说php长连接 连接mysql是鸡肋

发表评论