MySQL pconnect长久连接,是这样理解吗?
有三个用户A、B、C正在访问网站。如果开启了pconnect长连接的,那么:
第一种理解
A用户请求/index.php,/index.php连接mysql,返回到客户端浏览器。
B用户再去请求/index.php,那么是不是就直接用A用户连接到数据库的那个连接了
同理C用户也是这样用的同一个连接
第二种理解
A用户请求/index.php,暂停10分钟未有第二次请求
10分钟之后,再次请求/index.php,那么php使用数据库连接还是原先的那个。
且不管A用户之后请求该网站的任何其他PHP,PHP连接数据库都是用的一开始那个连接?
那时间是永久的?可以支撑多久?
同一时刻,B用户去请求/index.php,他重新开一个长久连接,与A用户开启的那个是不一样的
看php在web伺服器上寄生狀態是什麼樣的如果是nginx+phpcgi的方式那麼長連接是由每個cgi程式自己保持的,和用戶請求頁面的地址無關,只要是資料庫的ip和端口使用者名稱不變則不會斷開連接,即使使用者要求一次頁面之後關閉頁面連接也會保持一定時間,有點像phpcgi 自己保持了一個連接池,可以在mysql 中用show processlist 查看。假如是apache的方式可能pconnect 和connect 是一樣的。因為apache+module的方式 php的解析器等於每次都要重新初始化。
PHP
的不是很清楚,Python
對於Mysql
資料庫操作我做過實驗。单例连接
。web
服務初始化的時候,例如啟動Flask
或tornado
,進行資料庫Mysql
的連接,這個連接有超時的設置,一旦超時了,會自動重新連接。所有請求都共用這個連線進行資料庫查詢操作,簡單來說就是這個連線時一個單例。使用的資料庫驅動封裝為 torndb数据库连接池
,服務初始化的時候,啟動若干個連接,扔進資料庫連接池,然後請求就從連接池中取出連接進行查詢,查詢完畢之後,釋放連接回到連接池。可參考的程式碼測試了並發請求效率,第一種方案處理請求能力更強,Mysql 佔用資源更小。