大家都知道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方式生命周期
网友评论