实际上,术语连接池和持久连接在 PHP中的mysqli情况下指的是同一件事。
在这种情况下,持久连接是指从 PHP 脚本打开的 MySQL 连接,在脚本完成执行后保持打开状态,以便在以后的某些执行中再次使用。
连接池意味着有一个由 PHP 维护的持久连接池。来自这个池的一个空闲连接被提供给想要连接到 MySQL 的 PHP 脚本,并在脚本完成时返回到池中。
您可能想知道为什么我们需要 MySQL 连接池,为什么我们不对所有脚本只使用一个持久连接呢?
有两个原因:
- PHP 创建一个基于
host/port/username/password
使用的 MySQL 连接池。如果一个脚本想要以某种host/port/username/password
组合连接到 MySQL,PHP 会搜索具有相同值的空闲持久连接。如果未找到,则使用此host/port/username/password
组合创建一个新的持久连接。因此,我们至少需要与host/port/username/password
所有脚本使用的不同值一样多的不同持久连接。
- 您不能同时在一个 MySQL 连接上执行两个 SQL 命令。当两个 PHP 脚本同时执行时,就会发生这种情况。当两个脚本要同时与 MySQL 通信时,会创建两个持久的 MySQL 连接。池中的持久连接数等于最后执行的最大并行 PHP 脚本数,或等于
php.ini
.
重要通知:
只有当 PHP 作为 Web 服务器插件执行时, MySQL 连接池(和任何其他连接池)才能存在。当 PHP 可执行文件在脚本执行后终止时,池在 fast-cgi 模式下或以任何其他方式工作时不起作用。
编辑:如果 Web 服务器配置为对多个请求重用一个 PHP fast-cgi 进程,则 MySQL 连接池可以在 PHP 的 fast-cgi 模式下使用。如果 PHP fast-cgi 进程配置为在服务一个请求后退出,那么它的所有 MySQL 连接都将关闭。