国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

ivyzhang / 3300人閱讀

摘要:所以我們在編程過程中,應(yīng)該避免多次實(shí)例化,而產(chǎn)生不必要的數(shù)據(jù)庫性能消耗。解決方案封裝一個(gè)單例模式的類,該類實(shí)例化的過程就是創(chuàng)建連接的過程。當(dāng)腳本中再次執(zhí)行不帶參數(shù)的連接時(shí),還會(huì)再次產(chǎn)生一個(gè)新的數(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)

可以看到一個(gè)腳本的執(zhí)行產(chǎn)生了三個(gè)數(shù)據(jù)庫連接,但是如果將后面的實(shí)例化的pdo實(shí)例賦值給之前實(shí)例化的pdo實(shí)例,則新的連接會(huì)替換掉前一個(gè)連接,而不會(huì)產(chǎn)生新的連接。所以我們在編程過程中,應(yīng)該避免多次實(shí)例化pdo,而產(chǎn)生不必要的數(shù)據(jù)庫性能消耗。

解決方案

封裝一個(gè)單例模式的類,該類實(shí)例化的過程就是創(chuàng)建pdo連接的過程。我們要建立數(shù)據(jù)庫連接時(shí),不是手動(dòng)實(shí)例化pdo,而是去獲取這個(gè)類的實(shí)例。

實(shí)例化pdo類時(shí),設(shè)定 持久連接 參數(shù):

 true
));
?>

PHP官方文檔的引用:

很多 web 應(yīng)用程序通過使用到數(shù)據(jù)庫服務(wù)的持久連接獲得好處。持久連接在腳本結(jié)束后不會(huì)被關(guān)閉,且被緩存,當(dāng)另一個(gè)使用相同憑證的腳本連接請求時(shí)被重用。持久連接緩存可以避免每次腳本需要與數(shù)據(jù)庫回話時(shí)建立一個(gè)新連接的開銷,從而讓web 應(yīng)用程序更快。

官方所說的腳本結(jié)束,在fpm模式下就是指一次客戶端請求的結(jié)束另一個(gè)使用相同憑證的腳本也就可以對應(yīng)成另一個(gè)使用相同數(shù)據(jù)庫連接憑證的客戶端請求。首先我們要知道,這兩次客戶端的請求是根據(jù)fpm-workers的空閑情況,被分配給某個(gè)worker去執(zhí)行的,所以兩次請求被分配到同一個(gè)worker的可能性很低。接著,我們闡明下面的情景。

開啟持久連接之后,數(shù)據(jù)庫連接是被緩存于fpm進(jìn)程之中的。如果某個(gè)fpm-worker進(jìn)程中已經(jīng)緩存了持久連接,此時(shí)可能出現(xiàn)如下兩種情況:

當(dāng)腳本中再次執(zhí)行帶 ATTR_PERSISTENT 參數(shù)的pdo連接時(shí),會(huì)復(fù)用之前的連接,而不會(huì)產(chǎn)生新的連接。

當(dāng)腳本中再次執(zhí)行不帶 ATTR_PERSISTENT 參數(shù)的pdo連接時(shí),還會(huì)再次產(chǎn)生一個(gè)新的數(shù)據(jù)庫連接。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/28395.html

相關(guān)文章

  • (唯一合適) PDO 教程

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

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

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

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

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

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

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

    dabai 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<