PDO的持久化连接是指在哪个层面的持久化?

1.PDO开启持久化后是一个指在每个脚本执行的生命期内持久化吗?脚本执行结束了,是不是连接就释放了?
2.是不是fastcgi模式下PDO持久化的数据库连接是由php-fpm维持的。那么是不是连接到数据库的线程数就和php-fpm的worker进程数相同的?

阅读 3.6k
1 个回答

php.net 的官方Documentation:

很多 web 应用程序通过使用到数据库服务的持久连接获得好处。持久连接在脚本结束后不会被关闭,且被缓存,当另一个使用相同凭证的脚本连接请求时被重用。持久连接缓存可以避免每次脚本需要与数据库回话时建立一个新连接的开销,从而让 web 应用程序更快。

我的理解是:

  1. 官方所说的脚本结束,在fpm模式下就是指一次请求的结束另一个使用相同凭证的脚本也就可以对应成另一个使用相同数据库连接凭证的请求
  2. 所以,对于楼主的问题1,pdo开启的持久化并不是在脚本执行结束释放连接,它的生命周期应该是依赖于fpm进程的。对于问题2,因为client端的请求被分配到的fpm worker进程的不确定性,要保证这一次请求所创建的持久化连接能被应用到下一次请求,所以每个worker进程都会缓存一个pdo连接。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题