偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

什么是連接池?如何實(shí)現(xiàn)連接池?

開(kāi)發(fā) 前端
連接池正是是解決這個(gè)問(wèn)題最常用的方法,其思想非常簡(jiǎn)單,即是在服務(wù)啟動(dòng)的時(shí)候,先建立好若干連接,當(dāng)有請(qǐng)求過(guò)來(lái),就從中取出一個(gè),執(zhí)行下游操作,執(zhí)行完再放回,從而避免反復(fù)的建立和銷(xiāo)毀連接,以提升性能。

[[287262]]

什么是連接池

在實(shí)際應(yīng)用開(kāi)發(fā)中,一般會(huì)有很多訪問(wèn)下游的需求(下游包括但不限于服務(wù)/數(shù)據(jù)庫(kù)/緩存),在并發(fā)量很低的時(shí)候,通常不會(huì)有任何問(wèn)題的,但是當(dāng)服務(wù)單機(jī)QPS達(dá)到幾百、幾千、甚至上萬(wàn)的時(shí)候,如果每一次訪問(wèn)還是必須經(jīng)歷建立連接=》收發(fā)請(qǐng)求=》關(guān)閉連接=》釋放資源等步驟,系統(tǒng)的性能必然會(huì)急劇下降,甚至?xí)?dǎo)致系統(tǒng)崩潰。

連接池正是是解決這個(gè)問(wèn)題最常用的方法,其思想非常簡(jiǎn)單,即是在服務(wù)啟動(dòng)的時(shí)候,先建立好若干連接,當(dāng)有請(qǐng)求過(guò)來(lái),就從中取出一個(gè),執(zhí)行下游操作,執(zhí)行完再放回,從而避免反復(fù)的建立和銷(xiāo)毀連接,以提升性能。

如何實(shí)現(xiàn)連接池

連接池是一個(gè)獨(dú)立的服務(wù),需要常駐進(jìn)程。一個(gè)完整的連接池操作,通常要經(jīng)歷如下幾步:

(1)建立連接池對(duì)象(服務(wù)啟動(dòng))。

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

(3)對(duì)于一個(gè)訪問(wèn)請(qǐng)求,直接從連接池中得到一個(gè)連接。如果連接池對(duì)象中沒(méi)有空閑的連接,且連接數(shù)沒(méi)有達(dá)到最大(即:最大活躍連接數(shù)),創(chuàng)建一個(gè)新的連接;如果達(dá)到最大,則設(shè)定一定的超時(shí)時(shí)間,來(lái)獲取連接。

(4)運(yùn)用連接訪問(wèn)服務(wù)。

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

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

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

鑒于此,PHP要想獨(dú)立解決連接復(fù)用的問(wèn)題,那必須實(shí)現(xiàn)自己的連接池。所幸,PHP擴(kuò)展swoole剛好可以做到這一點(diǎn),利用swoole提供的task功能可以很方便做出一個(gè)連接池來(lái)。

如下是使用swoole實(shí)現(xiàn)連接池的部分代碼:

 

「系統(tǒng)架構(gòu)」什么是連接池?如何實(shí)現(xiàn)連接池?

 

通過(guò)這一段代碼,PHP就可以實(shí)現(xiàn)連接池,解決連接不可復(fù)用的問(wèn)題。

當(dāng)然以上只是一個(gè)示例,要想在生產(chǎn)環(huán)境中使用,僅僅這樣肯定不夠。這里推薦一個(gè)現(xiàn)成的工具——SMProxy。

SMProxy是一個(gè)基于mysql協(xié)議,使用swoole 開(kāi)發(fā)的mysql數(shù)據(jù)庫(kù)連接池。它有如下特色:

  • 支持讀寫(xiě)分離
  • 支持?jǐn)?shù)據(jù)庫(kù)連接池,能夠有效解決 PHP 帶來(lái)的數(shù)據(jù)庫(kù)連接瓶頸
  • 支持 SQL92 標(biāo)準(zhǔn)
  • 采用協(xié)程調(diào)度
  • 支持多個(gè)數(shù)據(jù)庫(kù)連接,多個(gè)數(shù)據(jù)庫(kù),多個(gè)用戶,靈活搭配
  • 遵守 MySQL 原生協(xié)議,跨語(yǔ)言,跨平臺(tái)的通用中間件代理
  • 支持 MySQL 事務(wù)
  • 支持 HandshakeV10 協(xié)議版本
  • 完美兼容 MySQL5.5 - 8.0
  • 兼容各大框架,無(wú)縫提升性能

另外,也支持Laravel、ThinkPHP等國(guó)內(nèi)主流框架。

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

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2011-06-01 13:54:10

MySQL

2021-05-27 09:50:03

連接池FTP服務(wù)器

2018-02-07 16:23:58

連接池內(nèi)存池AI

2009-09-22 14:52:55

Hibernate p

2009-09-22 16:04:50

Hibernate連接

2009-06-17 16:22:45

Hibernate連接

2022-11-11 09:41:04

連接池微服務(wù)數(shù)據(jù)庫(kù)

2009-06-17 09:59:46

Hibernate 連

2020-02-03 15:15:27

Druid連接池性能超出競(jìng)品

2009-07-15 11:00:48

proxool連接池

2015-04-27 09:50:45

Java Hibern連接池詳解

2010-06-25 10:36:27

Java連接池

2009-12-25 15:38:12

ADO連接池

2009-06-24 07:53:47

Hibernate數(shù)據(jù)

2024-12-04 15:55:19

2022-07-19 13:51:47

數(shù)據(jù)庫(kù)Hikari連接池

2010-01-05 10:11:23

ADO.NET連接池

2021-03-24 09:06:01

MySQL長(zhǎng)連接短連接

2023-12-26 01:24:45

Jedis連接池參數(shù)

2010-05-17 16:38:08

MySQL 連接池
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)