http://php.net/manual/en/pdo.connections.php 示例 #4 持久连接
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));
让我引用:
持久连接不会在脚本终止时关闭,它们会被缓存并在另一个脚本请求具有相同凭据的连接时重新使用。持久连接允许您避免在每次需要与数据库通信时创建新连接,从而提高此类应用程序的速度。
但据我了解,万一出现问题(脚本阻塞了表),每个人都在等待,只有一个连接。在异常关闭的情况下,打开的事务将继续(目前尚不清楚它们将做什么,因为脚本中没有继续事务的数据)。
问题:
1)我是否正确理解仅在守护进程中使用持久连接是有意义的,例如,守护进程不断地与一个数据库一起工作并在单个实例中启动,即 不互相竞争?
2)在PostgreSQL中,我不止一次听说连接池(connections)似乎使用成功了,但是他们如何绕过与事务相同的问题?
3) 一般来说,对于哪些站点、Web 项目来说,永久连接有意义?
对于那些对连接到数据库所需的毫秒数持批评态度的人。
在持久连接的正常实现中,状态被重置。例如,我不知道 Postgres,但 mysqli 会在每个新连接上调用 change_user() 函数,这会清除连接……这反过来又会增加连接时间,从而降低永久连接的合理性。据我所知,PDO 不会清除连接。
关于他们在上面的评论中写的恶魔——他们根本不在这里。
作为总结,您可以写 - 最好不要弄乱持久连接,尤其是在 PDO 中。