MySQL pconnect长久连接,是这样理解吗?
有三个用户A、B、C正在访问网站。如果开启了pconnect长连接的,那么:
第一种理解
A用户请求/index.php,/index.php连接mysql,返回到客户端浏览器。
B用户再去请求/index.php,那么是不是就直接用A用户连接到数据库的那个连接了
同理C用户也是这样用的同一个连接
第二种理解
A用户请求/index.php,暂停10分钟未有第二次请求
10分钟之后,再次请求/index.php,那么php使用数据库连接还是原先的那个。
且不管A用户之后请求该网站的任何其他PHP,PHP连接数据库都是用的一开始那个连接?
那时间是永久的?可以支撑多久?
同一时刻,B用户去请求/index.php,他重新开一个长久连接,与A用户开启的那个是不一样的
大家讲道理2017-04-17 11:33:47
看php在web服务器上寄生状态是什么样的 如果是 nginx+phpcgi的方式 那么长连接 是由每个cgi程序自己保持的,和用户请求页面的地址无关,只要是数据库的ip和端口用户名不变则不会断开连接,即使用户请求一次页面之后 关闭页面 连接也会保持一定时间,有点像phpcgi 自己保持了一个连接池,可以在mysql 中用 show processlist 查看 。假如是apache的方式可能pconnect 和connect 是一样的。因为apache+module的方式 php的解析器等于每次都要重新初始化。
ringa_lee2017-04-17 11:33:47
PHP
的不是很清楚,Python
对于 Mysql
数据库操作我做过实验。
单例连接
。web
服务初始化的时候,例如启动 Flask
或者 tornado
,进行数据库 Mysql
的连接,这个连接有超时的设置,一旦超时了,会自动重新连接。所有请求都共享这个连接进行数据库查询操作,简单来说就是这个连接时一个单例。使用的数据库驱动封装为 torndb
数据库连接池
,服务初始化的时候,启动若干个连接,扔进数据库连接池,然后请求就从连接池中取出连接进行查询,查询完毕之后,释放连接回到连接池。可参考的代码
测试了并发请求效率,第一种方案处理请求能力更强,Mysql 占用资源更小。