成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

一次php腳本執(zhí)行過程中多次實例化PDO的情景分析

ivyzhang / 3306人閱讀

摘要:所以我們在編程過程中,應(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

相關(guān)文章

  • (唯一合適) PDO 教程

    摘要:是什么首先思考為什么選擇是一個數(shù)據(jù)訪問抽象層抽象是雙重的一個是眾所周知但不太重要的另一個是模糊的但是是最重要的眾所周知為不同的數(shù)據(jù)庫提供了統(tǒng)一的接口雖然這個功能本身很龐大但是對于固定程序來說不是過于重要的事情基本所有的程序都是使用統(tǒng)一的后端 PDO是什么 首先思考, 為什么選擇PDO PDO 是一個數(shù)據(jù)訪問抽象層(Database Access Abstraction Layer). ...

    sf190404 評論0 收藏0
  • php安全問題思考

    摘要:用戶提交過來的數(shù)據(jù)都是不可信的,所以,在查庫或入庫前需要對提交過來的數(shù)據(jù)進行過濾或字符的轉(zhuǎn)換處理,以防止注入或攻擊等問題。 用戶提交過來的數(shù)據(jù)都是不可信的,所以,在查庫或入庫前需要對提交過來的數(shù)據(jù)進行過濾或字符的轉(zhuǎn)換處理,以防止SQL注入或xss攻擊等問題。 一、防止SQL注入 什么是SQL注入攻擊? 所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字...

    alphahans 評論0 收藏0
  • 寫一個“特殊”查詢構(gòu)造器 - (前言)

    摘要:而在項目開發(fā)中,我們想要的是一個更好用的可維護的工具,此時,對代碼的封裝模塊化就顯得尤為重要,于是出現(xiàn)了兩種方案查詢構(gòu)造器,對象關(guān)系映射。典型環(huán)境下按照一般的查詢構(gòu)造器處理就行。 文章目錄 寫一個特殊的查詢構(gòu)造器 - (前言) 寫一個特殊的查詢構(gòu)造器 - (一、程序結(jié)構(gòu),基礎(chǔ)封裝) 寫一個特殊的查詢構(gòu)造器 - (二、第一條語句) 寫一個特殊的查詢構(gòu)造器 - (三、條件查詢) 寫一個特殊...

    GitChat 評論0 收藏0
  • 一個 16年畢業(yè)生所經(jīng)歷 PHP 面試

    摘要:正確做法是給加索引,還有聯(lián)合索引,并不能避免全表掃描。 前言:有收獲的話請加顆小星星,沒有收獲的話可以 反對 沒有幫助 舉報三連 有心的同學(xué)應(yīng)該會看到我這個noteBook下面的其它知識,希望對你們有些許幫助。 本文地址 時間點:2017-11 一個16年畢業(yè)生所經(jīng)歷的php面試 一、什么是面試 二、面試準備 1. 問:什么時候開始準備? 2. 問:怎么準備? 三、面試...

    dabai 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<