PDO持久连接缓存要求

时间:2013-10-16 07:13:28

标签: php mysql caching pdo

确保我编写一个方案以最小化MySQL数据库连接数的最佳方法是什么?

目前,我的服务器上有一个ubuntu / PHP / apache设置,我在PDO中使用以下代码来确保持久连接:

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true
));

但是,我似乎总是有10个或更多连接。我不知道为什么会这样。引自php.net

  

许多Web应用程序将从持久连接中受益   到数据库服务器。持久连接最终没有关闭   脚本,但在另一个脚本请求时被缓存并重新使用   使用相同凭据的连接。持久连接   缓存允许您避免建立新的开销   每次脚本需要与数据库通信时产生连接   在更快的Web应用程序中。

这是否意味着我必须写 $dbh = null 来“关闭”并缓存连接?

2 个答案:

答案 0 :(得分:2)

根据定义,持久连接是一个未关闭的连接(即持久);好处是PHP 保持连接到数据库以供其他脚本使用(即每次脚本运行时都不需要拆卸和设置新的数据库连接)。

没有必要编写$dbh = null,因为这有效地暗示了脚本执行的终止;如果你想在早于脚本结束时发出连接信号,那么你可以明确地写它(PHP的垃圾收集器会在某个时候释放资源并将其返回到连接池以供其他脚本的使用)。

如果希望在每个脚本结束时关闭和销毁连接,则不要使用持久连接!

答案 1 :(得分:1)

'我似乎还有10个连接'似乎不是一个合法的问题或关注点,因为只要PHP正在运行,该属性就会保存数据库资源对象。因此,正如@eggyal所说,如果你想要连接被关闭或销毁,那就不要使用持久连接。

请阅读: