一、问题
1.在代码中查询数据连接是不是会新建一个进程?
答:不会。代码执行在一个进程(hyperf协程)内执行,进程会建立触发网络i/o。
2.新建的连接会随着请求的完毕销毁吗?
答:mysql连接在fpm下随着请求的进程销毁而消失,但在常驻内存下不会消失且会复用。
3.建立的长链多久后会消失?
mysql 相关参数 wait_timeout
show variables like ‘%timeout%’
查看相关参数,与服务器端无交互状态的连接,直到被服务器端强制关闭而等待的时间
二、实践
1.MySQL扩展 pdo_mysql
2.mysql8
3.laravels、tp5
二、实践
在navicate 上执行命令,show full processlist; ,如下图无mysql当前连接。
(1)在tp5上执行查询
执行show full processlist;,结果还是
让查询数据后,代码sleep(20)秒。如下如出现了一条连接!
20秒过后,执行命令如下图连接消失。
所以得:fpm模式下,建立的连接会随着请求完毕进程销毁而断开mysql的连接。
(2)laravels = laravel+swoole 点击详情
执行co()方法后再执行co1()方法,在navicate上查询,如下图只保留一条长链,可见在常驻内存下建立的长链会复用。
在上图的两个方法中开启注释sleep(),在分别执行两个方法,执行命令截图如下:
所以,mysql在常驻内存的代码中,连接不能复用的话会创建。