中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php如何實現連接池

發布時間:2021-09-17 21:46:40 來源:億速云 閱讀:219 作者:chen 欄目:web開發

本篇內容介紹了“php如何實現連接池”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

什么是連接池

在實際應用開發中,一般會有很多訪問下游的需求(下游包括但不限于服務/數據庫/緩存),在并發量很低的時候,通常不會有任何問題的,但是當服務單機QPS達到幾百、幾千、甚至上萬的時候,如果每一次訪問還是必須經歷建立連接=》收發請求=》關閉連接=》釋放資源等步驟,系統的性能必然會急劇下降,甚至會導致系統崩潰。

連接池正是是解決這個問題最常用的方法,其思想非常簡單,即是在服務啟動的時候,先建立好若干連接,當有請求過來,就從中取出一個,執行下游操作,執行完再放回,從而避免反復的建立和銷毀連接,以提升性能。

如何實現連接池

連接池是一個獨立的服務,需要常駐進程。一個完整的連接池操作,通常要經歷如下幾步:

(1)建立連接池對象(服務啟動)。

(2)按照事先指定的參數創建初始數量的連接(即:空閑連接數)。

(3)對于一個訪問請求,直接從連接池中得到一個連接。如果連接池對象中沒有空閑的連接,且連接數沒有達到最大(即:最大活躍連接數),創建一個新的連接;如果達到最大,則設定一定的超時時間,來獲取連接。

(4)運用連接訪問服務。

(5)訪問服務完成,釋放連接(此時的釋放連接,并非真正關閉,而是將其放入空閑隊列中。如實際空閑連接數大于初始空閑連接數則釋放連接)。

(6)釋放連接池對象(服務停止、維護期間,釋放連接池對象,并釋放所有連接)。

Java對連接池比較友好,有著很多成熟的解決方案,如DBCP  、C3P0、Druid等。而PHP在這方面就相對較弱,雖然Mysql提供了長連接的API,但在PHP機器數量較多,規模較大的情況下,mysql_pconnect非但不能節約MySQL資源,反而會加劇數據庫的負荷。這主要是由于它需要依賴apache或fpm,比如,假設有100臺PHP的應用服務器,每個機器需要啟動100個apache或fpm工作進程,每個進程都會產生一個長連接到MySQL,這樣一共會產生1萬個My  SQL連接。大家都知道,MySQL是每個連接會占用1個線程,如果有1萬個連接,那MYSQL就需要創建1萬個線程,這樣大量的系統資源會被浪費在線程間上下文切換上。實際上,你的業務代碼中并不是所有地方都在做數據庫操作,所以,如果創建了這么多的連接,但是很多都是空閑的,那這樣就會很浪費資源。

鑒于此,PHP要想獨立解決連接復用的問題,那必須實現自己的連接池。所幸,PHP擴展swoole剛好可以做到這一點,利用swoole提供的task功能可以很方便做出一個連接池來。

如下是使用swoole實現連接池的部分代碼:

php如何實現連接池

通過這一段代碼,PHP就可以實現連接池,解決連接不可復用的問題。

當然以上只是一個示例,要想在生產環境中使用,僅僅這樣肯定不夠。這里推薦一個現成的工具——SMProxy。

SMProxy是一個基于mysql協議,使用swoole 開發的mysql數據庫連接池。它有如下特色:

  • 支持讀寫分離

  • 支持數據庫連接池,能夠有效解決 PHP 帶來的數據庫連接瓶頸

  • 支持 SQL92 標準

  • 采用協程調度

  • 支持多個數據庫連接,多個數據庫,多個用戶,靈活搭配

  • 遵守 MySQL 原生協議,跨語言,跨平臺的通用中間件代理

  • 支持 MySQL 事務

  • 支持 HandshakeV10 協議版本

  • 完美兼容 MySQL5.5 - 8.0

  • 兼容各大框架,無縫提升性能

另外,也支持Laravel、ThinkPHP等國內主流框架。

所以,如果你正在使用PHP,而且也想使用連接池,那不妨看看這個工具。

“php如何實現連接池”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

龙井市| 曲阳县| 舟山市| 英吉沙县| 桐城市| 安溪县| 东明县| 怀远县| 岱山县| 乌苏市| 南溪县| 分宜县| 盐山县| 武定县| 福建省| 且末县| 莱阳市| 鄯善县| 绥化市| 琼海市| 稷山县| 宜城市| 东港市| 濮阳市| 卢湾区| 南昌县| 正安县| 马尔康县| 滦平县| 天津市| 上杭县| 深水埗区| 会昌县| 郓城县| 陵川县| 新乡市| 甘泉县| 博爱县| 辽阳县| 信宜市| 蒲江县|