PHP Cache快取機制與檔案快取原理

2021-07-05 01:09:30 字數 3317 閱讀 6620

php cache快取機制與檔案快取原理,使用 pear 中的 cache 可以將內容快取於檔案,資料庫或者記憶體中,以檔案為例。

沒有使用快取

pear_content_cache1.php

<?php 

echo "這是內容。<p>"; 

echo "當前時間是" . 

date('m-d-y h:i:s a', 

time()) . "<br>"; 

?>

為其加上快取

pear_content_cache2.php

<?php 

require_once 'cache/output.php';

//設定快取目錄,必須是可寫的 

$cachedir = './pear_cache'; 

$cache = 

new cache_output('file',

array('cache_dir' => 

$cachedir));

//如果nocache變數為空,使用快取中的內容 

//如果想獲得最新的內容,就要賦值給nocache變數 

if (

empty(

$_request['nocache']))   

else

//看cache id對應的快取內容是否可用 

if (

$content = 

$cache->start(

$cache_id)) 

//快取中不存在該內容,生成新內容並寫入快取 

echo "這是內容。<p>"; 

echo "當前時間是" . 

date('m-d-y h:i:s a', 

time()) . "<br>";

//把內容寫入快取 

echo

$cache->

end(); 

?>

分別重新整理這兩個檔案,你會發現 pear_content_cache1.php 中的「當前時間是」這一行中的時間是隨著重新整理而變化的,而 pear_content_cache2.php 中的這一行則不變。

這是由於 pear_content_cache2.php 使用了快取,將使用者請求的內容存入靜態檔案中。當使用者再次請求時,它直接從檔案中輸出,而不需要用程式動態生成內容。

對於 pear_content_cache2.php ,如果使用者想要讀取最新的資訊,而不是快取中成舊的資訊。那麼可以用http.//… /pear_content_cache2.php?nocache=1 來訪問,這將禁用快取功能,重新整理一下看看,你將發現時間會隨之變化。

總結pear內容快取類的使用:

1、包含 pear 包 要注意路徑。

2、包含output.php中的cache類

require_once 'cache/output.php';

3、設定快取目錄

$cachedir = './pear_cache'; 

確認這個目錄是可寫的,cache資料將會寫入這個目錄的子目錄中。

4、建立乙個輸出快取物件

$cache = 

new cache_output('file',

array('cache_dir' => 

$cachedir));

第乙個引數表示我們使用基於「檔案」方式的快取,第二個引數是乙個與快取目錄相關聯的陣列。

5、產生乙個唯一的cache id

這裡 $cache 物件的 generateid() 方法通過提供乙個資訊陣列 (url, http post data, 和 http cookie) 來獨一無二地標識這個請求,與其它請求區分開來。

6、增加乙個邏輯判斷語句看是否對應於cacheid的快取資料是否已經存在,如果存在,獲取資料並結束指令碼。

if (

$content = 

$cache->start(

$cache_id)) 

7、將產生內容的**放在以上邏輯語句之後,並結束使用cache物件。

echo

$cache->

end();

函式快取輸出 pear cache

pear除了可以對輸出的內容進行快取處理外,還可以將對某個函式的呼叫結果快取起來。這是個很有趣的功能,如果你的程式要頻繁使用到某個函式,而且呼叫的結果相同的話,我建議你不妨試試,特別是當這個函式執行起來比較慢的時候。

下面我們實現對乙個執行起來很慢的函式 slowfunction() 的緩衝呼叫。

<?php 

require_once 'cache/function.php'; 

$cachedir = './pear_cache/'; 

$cache = 

new cache_function('file',

array('cache_dir' => 

$cachedir)); 

$arr = 

array('東方', '南方','西方'); 

$cache->call('slowfunction', 

$arr); 

echo '<br>'; 

$arr = 

array('東方', '南方','西方');

slowfunction(

$arr);

function slowfunction(

$arr = 

null)   

) ?>

以下是示例的指令碼執行結果:

執行起來很慢的函式:

執行起來很慢的函式 :

**中,cache/function.php 類用來執行函式緩衝功能,$cache變數是乙個 cache_function 物件,使用基於檔案的函式快取,存入 $cachedir 目錄。要快取乙個函式呼叫,cache_function 物件 $cache 的 call() 方法要像這樣使用:

$cache->call(『slowfunction』, 

$arr);

這裡,slowfunction() 函式被呼叫,引數為乙個陣列 $arr ,這個函式被快取在 $cachedir 目錄下的乙個檔案裡。任何在此之後的對這個函式的呼叫,將會由 $cache->call() 返回該函式執行的結果。

$cache->call(『slowfunction』, 

$arr);

*note: copy from 

php cache 快取方法類一

php cache 快取方法類一 用法 example ch new cache echo a ip2long 202.97.224.68 echo echo long2ip a echo date d m j g i s t y ch close class cache echo data whi...

setbuffer與檔案的快取機制

背景 都知道檔案的讀取用到了快取機制,但是有以下幾點問題卻一直沒有確切的答案 1.快取機制到底是什麼機制。2.讀取檔案i o的過程到底是怎樣的,多執行緒併發讀取一二檔案是否會有速度上的提公升。參考 無快取io運算元據流向路徑 資料 核心快取區 磁碟 標準io運算元據流向路徑 資料 流快取區 核心快取...

Android 快取機制與實現

android開發本質就是手機和網際網路中的web伺服器之間進行通訊,就必然要從服務端獲取資料,而反覆通過網路獲取資料比較耗時,特別是訪問較多的時候,會極大的影響效能,android中可通過二級快取來減少頻繁的網路操作,減少流量,提高效能。二級快取工作機制 當android端獲得資料時比如獲取網路中...