Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO持久连接缓存要求_Php_Mysql_Caching_Pdo - Fatal编程技术网

Php PDO持久连接缓存要求

Php PDO持久连接缓存要求,php,mysql,caching,pdo,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个或更多的连接。我不知道这是为什么。引自: 许多web应用程序将

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

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

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true
));
然而,我似乎在任何时候都有10个或更多的连接。我不知道这是为什么。引自:

许多web应用程序将受益于建立持久连接 到数据库服务器。持久性连接在结束时未关闭 但在另一个脚本请求时缓存并重新使用 使用相同凭据的连接。持久连接 cache允许您避免建立新缓存的开销 每次脚本需要与数据库对话时都会产生连接,从而 在更快的web应用程序中


这是否意味着我必须写入
$dbh=null
以“关闭”并缓存连接?根据定义,持久连接是一个未关闭的连接(即它持续存在);好处是PHP保持与数据库的连接,以便其他脚本使用(即,不需要每次脚本运行时都拆卸和设置新的数据库连接)

无需写入
$dbh=null
,因为这在脚本执行终止时有效地暗示了这一点;但是,如果希望在脚本结束之前发出连接完成的信号(PHP的垃圾收集器将在某个时候释放资源并将其返回到连接池供其他脚本使用),则可以显式地编写它


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

我似乎还有10个连接”似乎不是一个合理的问题或担忧,因为只要PHP正在运行,该属性就会保存数据库资源对象。所以,正如@eggyal所说的,若你们想关闭或破坏连接,那个么就不要使用持久连接

另请阅读:


@StBlade不,不是。请查看我的答案/链接,了解原因。@StBlade:持久连接可能会暴露一些安全问题:例如,一个脚本设置了一个特定的数据库状态,然后在没有取消该状态的情况下终止(可能是意外的);下一个使用该连接的脚本将处于它没有预料到的状态。例如,第一次连接可能会更改会话时区;然后,第二个连接可能会测试当前是否允许登录。在执行数据库操作之前,通过第二个脚本验证数据库状态总是可以克服这些问题。@eggyal-即使进行了验证,也可能出现意外状态,尽管这是不可能的吗?这可能发生在双核机器中,例如,两个语句并行运行,第二个连接中的位翻转发生在验证之后,但在第一个连接中的状态更改之前?@bvpx:一个连接不能由多个脚本同时使用;当脚本尝试“连接”到MySQL时,它被分配给池中的脚本,然后在脚本释放它时(显式或隐式)返回到池中@bvpx:即使没有持久连接,这种问题也存在,并且是事务隔离的领域。当我的连接超过30个时,我得到了一个关于连接太多的错误,因此每天在我的站点上有10个连接,可能有4个唯一的用户,对于可伸缩性来说有点担心。除非两者不相关。@bvpx:如中所述,您可以通过设置来调整允许的最大连接数:您可能正在使用一个低成本的托管软件包,该软件包根据您的服务级别限制了连接数。如果您需要您的应用程序扩展到主机包支持的范围之外,那么您可能需要升级您的主机包。最后一个问题,非常感谢:对于这么少的用户,拥有10+个数据库连接是正常的吗?我听说有“更好的方法”来管理连接,也许我在PHP脚本的某个地方犯了一个新手错误?好吧,如果不知道PHP代码是什么样子,我们就不能进行咨询。如果您通过遵循DRY等原则以非常优化和高效的方式创建了脚本,那么我猜您是可以的,但如果otherwise@bvpx:连接的数量将取决于您希望在任何给定时间同时运行的PHP脚本的数量。一、 例如,经常单击以同时打开不同选项卡中的多个页面。因此,作为一个用户,我可以使用5个数据库连接。如果所有用户同时连接到该站点(并积极使用该站点),您可以自行猜测所需的资源。第一件事:为什么要“最小化连接计数”?似乎我的站点上只有几个用户,我的服务器正在达到最大连接数。我想把我的网站扩展到数千人,那么这是否意味着我需要数万个连接才能达到我的极限?考虑到每个访问站点的人可能会因为打开多个选项卡而产生5-10个连接。对于一个普通站点,一个连接足以容纳10个用户。甚至他们每个人都打开了5个标签。你知道PHP通常是如何工作的吗?我不知道PDO是如何处理连接的。我只知道我的网站没有产生太多的流量,但有许多连接建立。我正在寻找一个解决我遇到的问题的方法,而不是屈尊俯就、毫无帮助的问题。此外,我从这个帖子中的一条评论中得到了这条信息:
@bvpx:连接的数量将取决于您希望同时运行的PHP脚本的数量