一个php work进程只能处理一个请求,当完成一个请求了,才能处理下一次的请求

2.短连接:

执行到php关闭mysql连接的代码时,就断开,否则在处理本次请求结束的时候,释放mysql连接

实验:

<?php
$dbhost = '127.0.0.1';
$dbdatabase = 'im';
$username = 'root';
$userpass = '123456'; $dsn='mysql:host='.$dbhost.';dbname='.$dbdatabase.';';
$dbh=new PDO($dsn,$username,$userpass);
$stmt=$dbh->query('SELECT id FROM im_fri');
$row=$stmt->fetch();
sleep(10);
var_dump($row);

并发请求: /usr/local/ab/usr/bin/ab -c 100 -n 100 http://192.168.149.130/login/index

结果: 查看mysql连接数: show full processlist

这里我截了php work进程,和两个时刻的mysql连接情况的图片



一共五个php-fpm进程,mysql有五个连接,连接的id,会递增,说明每次请求完成,mysql连接消失,新的请求,php会重新连接mysql。

3.长连接:

当我们创建的数据连接为PDO持久化连接时,该连接在使用完毕或者PHP脚本结束后并不会被关闭,而是被PHP缓存起来。当另一个使用相同凭证(主机、端口、数据库名、用户名、密码等信息完全一致)的PHP脚本请求建立连接时,PHP将直接返回之前被缓存起来的连接,从而达到连接重用。持久连接缓存可以避免每次访问数据库都要建立一个新连接的开销。

实验:

<?php
$dbhost = '127.0.0.1';
$dbdatabase = 'im';
$username = 'root';
$userpass = '123456'; $dsn='mysql:host='.$dbhost.';dbname='.$dbdatabase.';';
$dbh=new PDO($dsn,$username,$userpass, [PDO::ATTR_PERSISTENT => true]);
$stmt=$dbh->query('SELECT id FROM im_fri');
$row=$stmt->fetch();
sleep(10);
var_dump($row);

并发请求: /usr/local/ab/usr/bin/ab -c 100 -n 100 http://192.168.149.130/login/index

结果: 查看mysql连接数: show full processlist

这里我截了php work进程,和两个时刻的mysql连接情况的图片





一共五个php-fpm进程,mysql有五个连接,连接的id不会变动,说明每次请求完成,mysql连接不会消失,在每个php-fpm进程中处理新的请求,php会重用以前mysql连接, 请求都结束了,每个php-fpm进程和mysql的连接还是不会断的,一直保持着。

3. 总结

方式 优点 缺点
短连 及时的释放资源 每次得重新建立连接,开销大,耗时大
长连 不用现场建立连接,耗时小 连接一直保持着,耗费服务器资源

10台php机器,每台机器上面有50个php-fpm进程,长连接的话, mysql要有五百个线程和500个php-fpm进程保持连接,可想mysql的上下文切换。

php和mysql连接方式(短 长 池)的更多相关文章

  1. MySQL 连接方式

    MySQL 连接方式 1:TCP/IP 套接字方式 这种方式会在TCP/IP 连接上建立一个基于网络的连接请求,一般是client连接跑在Server上的MySQL实例,2台机器通过一个TCP/IP ...

  2. MySQL连接方式小结

    1.   连接方式 1.1  方式1 /usr/local/mysql5./bin/mysql -p 此方法默认采用root@localhost用户登录, 1.2  方式2 /usr/local/my ...

  3. MySQL连接方式及大小写问题

     一.连接数据库 在命令行连接MySQL有这两种方式,一种是使用命令行参数:另一种是将参数信息写入配置文件 1.命令行中使用参数 -u用户名 -p密码 -D数据库名 -P数据库服务端口 -s安静模式 ...

  4. [转载] http长连接和短连接

    转载自http://blog.csdn.net/shine0181/article/details/7799754/ HTTP实现长连接 HTTP是无状态的 也就是说,浏览器和服务器每进行一次HTTP ...

  5. TCP/IP长连接和短连接

    http://www.cnblogs.com/bigwalnut/articles/2129070.html TCP/IP通信程序设计的丰富多样性 刚接触TCP/IP通信设计的人根据范例可以很快编出一 ...

  6. TCP/IP,http,socket,长连接,短连接——小结。

    来源:http://blog.chinaunix.net/uid-9622484-id-3392992.html TCP/IP是什么? TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. ...

  7. TCP/IP,http,socket,长连接,短连接——小结(转)

    概要: 之前对这几个概念有点糊涂,查阅了些资料,稍微概括下他们的区别吧.如有错误,请拍~~~ 先看图: TCP/IP是什么? TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.    在 ...

  8. TCP/IP,http,socket,长连接,短连接 —— 小结

    TCP/IP是什么? TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.    在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议.    在传输层中有TCP协议 ...

  9. MySQL 连接管理

    目录 MySQL 连接方式 TCP/IP 连接 Socket 连接 MySQL 连接工具 自带连接工具 第三方连接工具 MySQL 连接方式 TCP/IP 连接 # TCP/IP 连接 mysql - ...

随机推荐

  1. jq bootstrap select 点击不能动弹

    jq  bootstrap select 点击不能动弹   因为是样式selectpicker  冲突. 解决办法换 样式  form-control <select name="ty ...

  2. PHP-Socket-阻塞与非阻塞,同步与异步概念的理解

    1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步:      所谓同步,就是在发出一个功能调用时,在没 ...

  3. 由浅到深理解ROS(2)

    ROS文件系统 用户可以直接参看官网:http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem ROS文件系统中的两个最基本的概念:Packa ...

  4. iOS流布局UICollectionView系列七——三维中的球型布局

      摘要: 类似标签云的球状布局,也类似与魔方的3D布局 iOS流布局UICollectionView系列七——三维中的球型布局 一.引言 通过6篇的博客,从平面上最简单的规则摆放的布局,到不规则的瀑 ...

  5. 电路分析三------KCL,KVL,VCR方程

    1.2b方程 2.举例 举例2

  6. 在spring boot中使用自定义的properties

    1 在application.properties中添加 android.name=Tim android.password=123456 新建一个保存该Setting的配置类, @Configura ...

  7. 移动端meta viewport

    <meta name="viewport" content=" width=device-width, user-scalable=no, initial-scal ...

  8. [note]高精度模板

    高精度模板 先定义一个struct struct gj{ int l,s[N]; bool fh; void Print(){ if(fh)putchar('-'); for(int i=l;i> ...

  9. 我的Android进阶之旅------>/storage/sdcard0, /sdcard, /mnt/sdcard ,/storage/emulated/legacy 的区别

    转自:http://bbs.gfan.com/android-5382920-1-1.html 关于android的4.2的0文件夹的详解---- android 4.0 ----在galaxy ne ...

  10. QT设置textEdit光标到末尾

    //移动光标到末尾 QTextCursor cursor = ui->receiveTextEdit->textCursor(); cursor.movePosition(QTextCur ...