php快取機制

2022-06-05 13:12:09 字數 1531 閱讀 8163

開始之前先看下php自帶快取指令:

ob_start()  //開啟快取 php.ini中一般是4096

ob_clean()  //清空快取

ob_end_clean()  //清空快取,關閉快取

ob_flush() //重新整理快取(將快取現有內容輸出)  把php快取寫入apahce/nginx快取

flush() //把apahce/nginx快取寫入瀏覽器快取

ob_end_flush()  //重新整理快取,並關閉快取

$contents = ob_get_contents() //獲得快取內容

所有的php程式設計師都知道在php指令碼裡面執行 echo 「1」;訪客的瀏覽器裡面就會顯示「1」。

但是我們執行下面的**的時候,並不是顯示「1」之後1秒再顯示「2」,而是等待5秒後直接顯示「12」

echo '1';

sleep(1);

echo '2';

這就涉及到幾個快取機制,為了更高的薪水,同學們非常有必要把這個快取機制學習好。

通常情況下,我們的web應用由以下幾個要素構成:

php->apache->瀏覽器。這篇文章我們就以這個架構為例來講解資料是如何在整個「鏈條」上流通的。

看了上面的圖,我們終於知道上面為什麼會同時顯示「12」了,因為echo '1'還沒有裝滿php的快取,所以「1」還在php的快取裡面,沒有到瀏覽器,等到程式結束後「12」才一起到瀏覽器。

當然我們也可以手動重新整理快取

echo '1';

ob_flush(); //

把php快取寫入apahce快取

flush(); //

把apahce快取寫入瀏覽器快取

sleep(1);

echo '2';

我們把**改成如上之後,瀏覽器還是要等1秒才同時顯示「12」,這是因為「1」雖然已經傳送給瀏覽器,但是瀏覽器快取還沒有裝滿,並沒有渲染,一直到等到程式結束後才渲染出「12」。

我們以谷歌瀏覽器為例(快取1000bytes),通過下面的**,我們就可以實現先顯示「1」,隔1秒再顯示「2」

for($i=1;$i

<11;$i++)

講到這裡,我們不得不提一下「ob_start()」這個函式,這個函式的作用就是開啟乙個新的php快取。我們還是通過**來說明

ob_start

();for($i=1;$i

<11;$i++)

在原有的基礎上我們僅僅加了個ob_start(),結果又變成了等1秒後同時顯示"1234"了,(需要將1000改為4096才會1秒顯示i個)。這是因為每乙個ob_start()都在原來的快取空間上開闢乙個子快取空間,ob_flush()是把當前快取空間輸出到上級快取空間,php只有乙個快取空間的時候,上級快取空間就是apache的快取,當php有多個快取空間的時候,ob_flush()的就不能把php快取寫入apache快取了

PHP快取機制

普遍快取技術 資料快取 這裡所說的資料快取是指資料庫查詢php快取機制,每次訪問頁面的時候,都會先檢測相應的快取資料是否存在,如果不存在,就連線資料庫,得到資料,並把查詢結果序列化後儲存到檔案中,以後同樣的查詢結果就直接從快取表或檔案中獲得。用的最廣的例子看discuz的搜尋功能,把結果id快取到乙...

php快取機制

資料快取 這裡所說的資料快取是指資料庫查詢快取,每次訪問頁面的時候,都會先檢測相應的快取資料是否存在,如果不存在,就連線資料庫,得到資料,並把查詢結果序列化後儲存到檔案中,以後同樣的查詢結果就直接從快取表或檔案中獲得。用的最廣的例子看discuz的搜尋功能,把結果id快取到乙個表中,下次搜尋相同關鍵...

php快取機制

普遍快取技術 資料快取 這裡所說的資料快取是指資料庫查詢快取,每次訪問頁面的時候,都會先檢測相應的快取資料是否存在,如果不存在,就連線資料庫,得到資料,並把查詢結果序列化後儲存到檔案中,以後同樣的查詢結果就直接從快取表或檔案中獲得。用的最廣的例子看discuz的搜尋功能,把結果id快取到乙個表中,下...