PHP中的连接池

问题描述:

使用PHP时可能会缓存数据库连接,就像在J2EE容器中一样?如果是这样,怎么样?PHP中的连接池

+0

这个怎么样? https://github.com/junamai2000/mod_namy_pool – nam 2012-03-01 22:25:19

+0

您是否使用[mysql_pconnect()](http://www.php.net/mysql_pconnect)查看了持久连接? – 2008-09-02 15:44:57

您不能手动实例化连接池。

但是,您可以使用“内置”连接池与mysql_pconnect功能。

我想你使用的是mod_php,对不对?

当一个PHP文件完成执行时,它的所有状态都会被终止,因此没有办法(在PHP代码中)执行连接池。相反,你必须依靠扩展。

您可以mysql_pconnect这样您的连接在页面结束后不会关闭,这样它们就可以在下一个请求中被重用。

这可能只是你需要的,但这与连接池不同,因为没有办法指定维护打开的连接数。

干杯。

+3

连接可以被不同的用户重用吗?如果是这样,为什么手册说我们应该配置MySQL以避免连接太多? – omg 2009-08-30 14:28:40

在php中没有连接池
mysql_pconnect and 连接池是两个不同的东西。 有很多与mysql_pconnect有关的问题,首先您应该阅读手册并小心使用它,但这不是连接池。

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

我们可以为请到通过下面的链接做的PHP连接缩放:http://www.oracle.com/technetwork/articles/dsl/white-php-part1-355135.html

所以在PHP中没有连接池。

由于Julio说apache会在当前请求结束时释放所有资源。你可以使用mysql_pconnect,但是你受限于这个功能,你必须非常小心。其他选择是使用单例模式,但没有一个是共享。

这是一个很好的文章:http://blogs.oracle.com/opal/2007/01/highly_scalable_connection_poo.html

而且阅读这一个http://www.apache2.es/2.2.2/mod/mod_dbd.html

+7

没有连接池?哇。 – Justin 2011-07-13 22:35:18

持久连接都没有像连接池。如果您在同一个请求/脚本执行上下文中创建多个数据库连接,则只会重用php中的持久连接。在大多数典型的web dev场景中,如果您使用mysql_pconnect,您将最大限度地提高连接速度,因为您的脚本将无法在下次请求时获取对任何打开连接的引用。在php中使用db连接的最佳方式是创建一个db对象的单例实例,以便在脚本执行的上下文中重用连接。这仍然会导致每个请求至少有1分贝连接,但是它比每个请求连接多个分贝连接要好。

由于php的性质,在php中没有真正的db连接池。Php不是一个应用程序服务器,它可以在请求之间坐在那里,并管理对开放连接池的引用,至少在没有某种重大黑客入侵的情况下。我认为理论上你可以在php中编写一个应用服务器,然后将其作为一个命令行脚本运行,只需要在后台放置一些数据库连接,并将引用传递给其他脚本,但我不会知道这在实践中是否可行,如何将命令行脚本中的引用传递给其他脚本,并且我怀疑它即使可以实现也会表现良好。无论如何,这主要是猜测。我只是注意到其他人发布到apache模块的链接,以允许prefork服务器(如php)的连接池。看起来有趣: https://github.com/junamai2000/mod_namy_pool#readme

您可以使用MySQLi

欲了解更多信息,向下滚动到连接池部分@http://www.php.net/manual/en/mysqli.quickstart.connections.php#example-1622

注意,连接池也取决于你的服务器(即Apache的httpd的)和它的配置上。