PHP 中的连接池

2022-08-30 08:05:01

在使用 PHP 时,是否可以像在 J2EE 容器中那样高速缓存数据库连接?如果是这样,如何?


答案 1

php 中没有连接池
mysql_pconnect连接池是两回事。有许多问题与之相关,首先您应该阅读手册并仔细使用它,但这不是连接池。mysql_pconnect

连接池是应用程序服务器管理连接的一种技术。当应用程序需要连接时,它会向应用程序服务器询问该连接,如果存在一个空闲连接,则应用程序服务器将返回其中一个池连接。

我们可以在php中进行连接扩展,请通过以下链接:http://www.oracle.com/technetwork/articles/dsl/white-php-part1-355135.html

所以php中没有连接池。

正如Julio所说,apache在当前请求结束时释放所有资源。您可以使用mysql_pconnect但该功能受到限制,您必须非常小心。另一种选择是使用单例模式,但这些都不是池化。

这是一篇好文章:https://blogs.oracle.com/opal/highly-scalable-connection-pooling-in-php

也请阅读此 http://www.apache2.es/2.2.2/mod/mod_dbd.html


答案 2

持久连接与连接池完全不同。只有在相同的请求/脚本执行上下文中进行多个数据库连接时,才会重用 php 中的持久连接。在大多数典型的 Web 开发方案中,如果使用mysql_pconnect,你将更快地最大化连接,因为你的脚本将无法在下一个请求中获取对任何打开的连接的引用。在 php 中使用 db 连接的最佳方法是创建 db 对象的单例实例,以便在脚本执行的上下文中重用该连接。这仍然会为每个请求产生至少 1 个数据库连接,但比每个请求进行多个数据库连接要好。

由于php的性质,php中没有真正的数据库连接池。Php不是一个应用程序服务器,它可以坐在请求之间并管理对开放连接池的引用,至少在没有某种重大黑客攻击的情况下是这样。我认为从理论上讲,你可以用php编写一个应用程序服务器,并将其作为命令行脚本运行,该脚本将坐在后台并保持一堆数据库连接打开,并将对它们的引用传递给其他脚本,但我不知道这在实践中是否可行,如何将引用从命令行脚本传递到其他脚本, 我有点怀疑它的表现会很好,即使你能把它拉下来。无论如何,这主要是猜测。我刚刚注意到其他人发布到apache模块的链接,以允许对php等预分叉服务器进行连接池。看起来很有趣:https://github.com/junamai2000/mod_namy_pool#readme


推荐