摘要:所以我們在編程過程中,應(yīng)該避免多次實例化,而產(chǎn)生不必要的數(shù)據(jù)庫性能消耗。解決方案封裝一個單例模式的類,該類實例化的過程就是創(chuàng)建連接的過程。當(dāng)腳本中再次執(zhí)行不帶參數(shù)的連接時,還會再次產(chǎn)生一個新的數(shù)據(jù)庫連接。
情景分析
腳本代碼:
CLI執(zhí)行:
root@78ad0df34cef:/home/www/test# php index.php 連接成功1 連接成功2 連接成功3 保持連接中... 執(zhí)行結(jié)束在腳本sleep過程中,我們查看mysql的連接信息:
mysql> show processlist; +----+------+-----------+------+---------+------+----------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+------+---------+------+----------+------------------+ | 3 | root | localhost | NULL | Query | 0 | starting | show processlist | | 24 | root | localhost | test | Sleep | 6 | | NULL | | 25 | root | localhost | test | Sleep | 6 | | NULL | | 26 | root | localhost | test | Sleep | 6 | | NULL | +----+------+-----------+------+---------+------+----------+------------------+ 4 rows in set (0.00 sec)可以看到一個腳本的執(zhí)行產(chǎn)生了三個數(shù)據(jù)庫連接,但是如果將后面的實例化的pdo實例賦值給之前實例化的pdo實例,則新的連接會替換掉前一個連接,而不會產(chǎn)生新的連接。所以我們在編程過程中,應(yīng)該避免多次實例化pdo,而產(chǎn)生不必要的數(shù)據(jù)庫性能消耗。
解決方案封裝一個單例模式的類,該類實例化的過程就是創(chuàng)建pdo連接的過程。我們要建立數(shù)據(jù)庫連接時,不是手動實例化pdo,而是去獲取這個類的實例。
實例化pdo類時,設(shè)定 持久連接 參數(shù):
true )); ?>PHP官方文檔的引用:
很多 web 應(yīng)用程序通過使用到數(shù)據(jù)庫服務(wù)的持久連接獲得好處。持久連接在腳本結(jié)束后不會被關(guān)閉,且被緩存,當(dāng)另一個使用相同憑證的腳本連接請求時被重用。持久連接緩存可以避免每次腳本需要與數(shù)據(jù)庫回話時建立一個新連接的開銷,從而讓web 應(yīng)用程序更快。官方所說的腳本結(jié)束,在fpm模式下就是指一次客戶端請求的結(jié)束。另一個使用相同憑證的腳本也就可以對應(yīng)成另一個使用相同數(shù)據(jù)庫連接憑證的客戶端請求。首先我們要知道,這兩次客戶端的請求是根據(jù)fpm-workers的空閑情況,被分配給某個worker去執(zhí)行的,所以兩次請求被分配到同一個worker的可能性很低。接著,我們闡明下面的情景。
開啟持久連接之后,數(shù)據(jù)庫連接是被緩存于fpm進程之中的。如果某個fpm-worker進程中已經(jīng)緩存了持久連接,此時可能出現(xiàn)如下兩種情況:
當(dāng)腳本中再次執(zhí)行帶 ATTR_PERSISTENT 參數(shù)的pdo連接時,會復(fù)用之前的連接,而不會產(chǎn)生新的連接。
當(dāng)腳本中再次執(zhí)行不帶 ATTR_PERSISTENT 參數(shù)的pdo連接時,還會再次產(chǎn)生一個新的數(shù)據(jù)庫連接。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28395.html
摘要:是什么首先思考為什么選擇是一個數(shù)據(jù)訪問抽象層抽象是雙重的一個是眾所周知但不太重要的另一個是模糊的但是是最重要的眾所周知為不同的數(shù)據(jù)庫提供了統(tǒng)一的接口雖然這個功能本身很龐大但是對于固定程序來說不是過于重要的事情基本所有的程序都是使用統(tǒng)一的后端 PDO是什么 首先思考, 為什么選擇PDO PDO 是一個數(shù)據(jù)訪問抽象層(Database Access Abstraction Layer). ...
摘要:而在項目開發(fā)中,我們想要的是一個更好用的可維護的工具,此時,對代碼的封裝模塊化就顯得尤為重要,于是出現(xiàn)了兩種方案查詢構(gòu)造器,對象關(guān)系映射。典型環(huán)境下按照一般的查詢構(gòu)造器處理就行。 文章目錄 寫一個特殊的查詢構(gòu)造器 - (前言) 寫一個特殊的查詢構(gòu)造器 - (一、程序結(jié)構(gòu),基礎(chǔ)封裝) 寫一個特殊的查詢構(gòu)造器 - (二、第一條語句) 寫一個特殊的查詢構(gòu)造器 - (三、條件查詢) 寫一個特殊...
摘要:正確做法是給加索引,還有聯(lián)合索引,并不能避免全表掃描。 前言:有收獲的話請加顆小星星,沒有收獲的話可以 反對 沒有幫助 舉報三連 有心的同學(xué)應(yīng)該會看到我這個noteBook下面的其它知識,希望對你們有些許幫助。 本文地址 時間點:2017-11 一個16年畢業(yè)生所經(jīng)歷的php面試 一、什么是面試 二、面試準備 1. 問:什么時候開始準備? 2. 問:怎么準備? 三、面試...
閱讀 3421·2021-11-24 09:39
閱讀 1808·2021-11-17 09:33
閱讀 3540·2021-10-12 10:12
閱讀 5044·2021-09-22 15:51
閱讀 1122·2019-08-30 13:11
閱讀 3584·2019-08-30 10:59
閱讀 576·2019-08-30 10:48
閱讀 1323·2019-08-26 13:48