PHP建立MySQL与MySQLi持久化连接(长连接)区别 |
在PHP开发中,与数据库的交互是非常常见的操作 。MySQL是一种流行的关系型数据库,而PHP为其提供了两种不同的API,即MySQL和MySQLi 。在使用这两个API时,我们可以选择使用持久连接或非持久连接 。MySQL的持久连接需使用`mysql_pconnect`,而MySQLi持久连接默认启用 。尽管MySQLi有性能和安全优势,但使用持久连接时应注意服务器连接限制和资源占用问题 。 php-mysql的持久连接只在同一个进程里可“复用”,不同进程之间玩不了 。fpm的子进程可以常驻,所以只要子进程还在,那么上一次请求创建的持久连接,下一次请求还可以复用 。cli每次都新起一个进程,没法把连接复用,那么短连接和持久连接其实是一样的 。 如果在 PHP 5.3 的版本以前想要创建MySQL的持久化连接(长连接),需要显式调用 pconnect 创建: $con = mysql_pconnect($server['host'], $server['username'], $server['password']); if (!($con === false)) { if (mysql_select_db($server['database'], $con) === false) { echo('Could not select database: ' . mysql_error()); continue; } // do something here…… } 从 PHP 5.3 开始, mysqli 扩展开始支持持久化连接,持久化连接已经在 PDO MYSQL 和 ext/mysql 中提供支持 。 持久化连接的优势持久化连接的目的在于重用客户端到服务器之间的连接, 而不是每次在需要的时候都重新建立一个连接 。 不像 mysql 扩展,mysqli 没有提供一个特殊的方法用于打开持久化连接 。 如果 mysqli 打开一个持久化连接,需要在创建连接时,在host前面增加 mysql 和 mysqli 扩展的区别如下:
持久化长连接的风险
mysqli 扩展的持久化连接提供了内建的清理处理代码 。 mysqli 所做的清理工作包括:
这确保了将连接返回到连接池的时候, 它处于一种“干净”的状态,可以被其他客户端进程所使用 。
自动清理的特性有优点也有缺点: 这个自动清理的代码可以通过在编译 php 时定义
为什么我的长连接不生效?村长多说两句,相信很多小伙伴遇到过这个问题:
一般 php 有2种运行模式, 一是作为 cgi 运行, 二是作为 apache 的模块运行:
说白了,如果你是 cgi 运行方式,pconnection 永远也不会生效 。 长连接最大的缺点就是万一一个用户锁死,当前进程就永久锁死了;假如你在apache里的设置是进程永不销毁的话就… 到此这篇关于PHP建立MySQL与MySQLi持久化连接(长连接)区别的文章就介绍到这了,更多相关php连接MySQL与MySQLi的长连接区别内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |