国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

php實現(xiàn)mysql連接池效果實現(xiàn)代碼的詳解

2020-03-22 19:43:44
字體:
供稿:網(wǎng)友
這篇文章主要介紹了php代碼實現(xiàn)mysql連接池效果,需要的朋友可以參考下

循環(huán)從mysql連接池中獲取連接,不需要重復(fù)創(chuàng)建新的連接。

參考配置修改:可以參考下面的文章

防止訪問量過大,把連接數(shù)占滿了

 ?php * @author xuleyan * @title mysql類html' target='_blank'>class DbHelper{ //連接池 private $_pools = []; //連接池大小 const POOLSIZE = 5; const USERNAME = root  const PASSWORD = root  const HOST = 127.0.0.1  const DB = test  public function __construct()  $db = self::DB; $username = self::USERNAME; $password = self::PASSWORD; $host = self::HOST; //持久化連接 $presistent = array(PDO::ATTR_PERSISTENT = true); for ($i=0; $i self::POOLSIZE; $i++) {  $connection = new PDO( mysql:dbname=$db;host=$host , $username, $password); // sleep(3); array_push($this- _pools, $connection); //從數(shù)據(jù)庫連接池中獲取一個數(shù)據(jù)庫鏈接資源 public function getConnection() echo get . count($this- _pools) . br  if (count($this- _pools) 0) { $one = array_pop($this- _pools); echo getAfter . count($this- _pools) . br  return $one; } else { throw new ErrorException ( mark 數(shù)據(jù)庫連接池中已無鏈接資源,請稍后重試! /mark ); //將用完的數(shù)據(jù)庫鏈接資源放回到數(shù)據(jù)庫連接池 public function release($conn) echo release . count($this- _pools) . br  if (count($this- _pools) = self::POOLSIZE) { throw new ErrorException ( mark 數(shù)據(jù)庫連接池已滿! /mark ); } else { array_push($this- _pools, $conn); // $conn = null; echo releaseAfter . count($this- _pools) . br  public function query($sql) try { $conn = $this- getConnection(); $res = $conn- query($sql); $this- release($conn); return $res; } catch (ErrorException $e) { print error: . $e- getMessage(); die; public function queryAll($sql) try { $conn = $this- getConnection(); $sth = $conn- prepare($sql); $sth- execute(); $result = $sth- fetchAll(); return $result; } catch (PDOException $e) { print error: . $e- getMessage(); die;}

在另外的文件這樣調(diào)用

 ?php require_once db.php $sql = select * from user $dbhelper = new DbHelper;for ($i=0; $i $i++) {  $res = $dbhelper- query($sql); // var_dump($res) . PHP_EOL;}

ThinkPHP連接MySQL的連接池使用方法

因為一個小bug,導(dǎo)致項目在某個晚上向mysql發(fā)送了大量的連接請求,同時mysql服務(wù)器的dns出現(xiàn)問題,導(dǎo)致反解超時。最后活活的把mysql服務(wù)器拖掛了。

最后bug修復(fù)了,并研究了一下增加 mysql連接池的辦法。

這兩天搜了一下,發(fā)現(xiàn)ThinkPHP文檔里沒有連接池的相關(guān)文檔。所以自己研究了下代碼。

首先: PHP常用的mysql擴(kuò)展庫有三種 : mysql, mysqli, pdo_mysql.

* mysqli 是不支持連接池的。
* pdo_mysql 支持,但是,thinkPHP的pdo擴(kuò)展不支持mysql,僅支持: MSSQL , ORACLE , Ibase , OCI . ( 見 Pdo.class.php 的第59行)

* mysql 支持,通過方法:mysql_pconnect . (具體參數(shù)可以看php官方文檔)

1 使ThinkPHP啟用 長連接的方式是:

class BaseMysql extends Model { protected $connection = array( db_type = mysql , db_user = *** , db_pwd = ******* , db_host = ******* , db_port = 3306 , db_name = custom , db_params = array( persist = true),}

如果你認(rèn)為,配置這個就萬事大吉了,那就大錯特錯了。

2 mysql - my.cnf修改配置:
[mysqld]

interactive_timeout =60 // 交互連接(mysql-client)的過期時間。
wait_timeout =30 // 長連接的過期時間時間。 這個一定要改啊!默認(rèn)是8個小時。 如果請求量大點,很快連接數(shù)就占滿了。
max_connections = 100 //最大連接數(shù),可以認(rèn)為是連接池的大小

3 php.ini 修改:
[MySql]
mysql.allow_persistent = On
mysql.max_persistent = 99 // 要小于mysql配置的最大連接數(shù)
mysql.max_links = 99

4 webserver如果是apache ,需要啟用keep-alive。 否則,一旦請求退出,長連接將無法再重用。
webserver 是nginx的情況:
pm = dynamic // 默認(rèn)啟動一些子進(jìn)程,用于處理http請求。
pm.max_children // 最大的子進(jìn)程數(shù)。 這個配置要小于 mysql 的max_connections。

5 如果發(fā)現(xiàn)還是不能用,請檢查操作系統(tǒng)的keepalive 是否啟用。

綜述:

需要 keep-alive 和 數(shù)據(jù)庫長連接同時啟用,否則長連接回白白的占用mysql的連接數(shù)資源,而無法重用。
對于 nginx + php-fpm 的情況,其實是保持了 php-fpm 子進(jìn)程與mysql的長連接。 前端的http請求被分配給哪個 php-fpm子進(jìn)程,該子進(jìn)程就重用自己與mysql 的長連接。

上述是一整天的研究結(jié)果,不完備的地方,請大家指出,在此先行謝過!

相關(guān)推薦:

PHP CURL與java http使用方法的詳解

PHP微信開發(fā)之微信錄音臨時轉(zhuǎn)永久存儲php技巧

PHP設(shè)計模式之注冊樹模式分析php技巧


以上就是php實現(xiàn)mysql連接池效果實現(xiàn)代碼的詳解的詳細(xì)內(nèi)容,PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 长白| 平罗县| 剑河县| 孝义市| 通城县| 全椒县| 莱州市| 长岭县| 桂阳县| 华池县| 泗阳县| 郓城县| 万州区| 天峻县| 酒泉市| 尤溪县| 桦南县| 泰来县| 巴马| 衡阳县| 汝城县| 德兴市| 高邑县| 共和县| 繁昌县| 邵阳县| 巴塘县| 砀山县| 临湘市| 平塘县| 措美县| 保德县| 萝北县| 沙湾县| 贵南县| 同江市| 屏南县| 平舆县| 咸宁市| 石首市| 咸宁市|