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端獲得資料時比如獲取網路中...