PHP中的连接池
是否有可能像在J2EE容器中一样使用PHP时caching数据库连接? 如果是这样,怎么样?
在PHP中没有连接池 。
mysql_pconnect和连接池是两个不同的东西。 有许多问题与mysql_pconnect
,首先你应该阅读手册并小心使用它,但这不是连接池。
连接池是应用程序服务器pipe理连接的一种技术。 当应用程序需要连接时,它向应用程序服务器请求连接,应用程序服务器返回其中一个空闲连接。
我们可以做连接缩放在PHP中,请通过以下链接: http : //www.oracle.com/technetwork/articles/dsl/white-php-part1-355135.html
所以没有连接池在PHP中。
正如Julio所说的,当请求结束时,apache会释放所有的资源用于当前的请求。 你可以使用mysql_pconnect,但是你只能使用这个函数,你必须非常小心。 其他select是使用单身模式,但没有一个是共享的。
这是一篇很好的文章: http : //blogs.oracle.com/opal/2007/01/highly_scalable_connection_poo.html
持久连接与连接池无关。 如果您在同一个请求/脚本执行上下文中创build多个数据库连接,则只有在php中使用持久连接才能重用。 在大多数典型的Web开发环境中,如果您使用mysql_pconnect,您的连接方式将会更快,因为您的脚本将无法在下一个请求中获取任何打开的连接的引用。 在php中使用db连接的最好方法是创build一个db对象的单例实例,以便在脚本执行的上下文中重用连接。 这仍然会导致每个请求至less1分贝连接,但它比每个请求多个分贝连接要好。
由于php的性质,在php中没有真正的数据库连接池。 PHP不是一个应用程序服务器,它可以在请求之间坐在那里,pipe理对开放连接池的引用,至less不是没有某种重大的黑客攻击。 我认为理论上你可以在php中编写一个应用服务器,然后把它作为一个命令行脚本运行,然后在后台打开一些数据库连接,并把引用传递给其他脚本,但是我不知道知道在实践中是否可行,如何将命令行脚本的引用传递给其他脚本,并且我怀疑即使可以将其引用也会performance良好。 无论如何,这主要是猜测。 我只是注意到其他人发布到apache模块的链接,以允许prefork服务器(如php)的连接池。 看起来很有趣: https : //github.com/junamai2000/mod_namy_pool#readme
我想你正在使用mod_php,对不对?
当一个PHP文件完成执行时,所有的状态都被终止,所以没有办法(在PHP代码中)执行连接池。 相反,你必须依靠扩展。
你可以使用mysql_pconnect,这样你的连接就不会在页面完成后closures,这样它们就可以在下一个请求中被重用了。
这可能是你所需要的,但是这与连接池不同,因为没有办法指定维护打开的连接数量。
干杯。
你可以使用MySQLi 。
欲了解更多信息,请向下滚动到连接池部分@ http://www.php.net/manual/en/mysqli.quickstart.connections.php#example-1622
请注意,连接池也依赖于您的服务器(即Apache httpd)及其configuration。
您不能手动实例化连接池。
但是你可以使用mysql_pconnect函数的“内置”连接池。