Cache_Lite

http://pear.php.net/package/Cache_Lite/ (現時点でnot maintainedになってしまっている…)

簡易キャッシュライブラリ。キャッシュはファイルとして指定されたディレクトリに保存する事が出来る。

簡単な使い方

require_once 'Cache/Lite.php';

$options = array (
  'lifeTime' => 3
);
$cache = new Cache_Lite($options);
$id = 1;
if ($data = $cache->get($id)) {
  echo 'Cache found'."\n";
  echo 'echo $data: '.$data."\n";
} else {
  $data = '"Cached string"';
  $cache->save($data);
  echo 'Cache not found, save new chache'."\n";
}

これにより3秒間だけ$dataが保存されます(デフォルトでは/tmpに実態が保存されます)。何度も実行すると結果に変化が見られるはずです。もちろん3秒より増やしたい場合は$optionslifeTimeの値を変更する必要があります。

Optionを変えてみる

オプションはコンストラクタにハッシュを渡す事で変更するタイプのライブラリになっています。ここでは有効なオプションを以下に列挙します。()内はデフォルト値で、オプションを1つも取らなくとも基本的には動作するように出来ています。

  • cacheDir: キャッシュの保存先 (/tmp)
  • caching: そもそもキャッシュするかどうか。デバッグ用途 (true)
  • lifeTime: キャッシュの生存時間 (3600)
  • fileLocking: ファイルロックするか(true)
  • writeControl:
  • readControl:
  • readControlType:
  • memoryCaching:
  • fileNameProtection:
  • automaticSerialization: キャッシュのオートシリアライズ。下記参照(false)
  • automaticCleaningFactor: キャッシュのオートクリーン。下記参照 (0)
  • hashedDirectoryLevel:
  • hashedDirectoryUmask:
  • errorHandlingAPIBreak:

ディレクトリを変更する

cacheDirオプションを与えます

require_once 'Cache/Lite.php';
 
$options = array (
  'lifeTime' => 3,
  'cacheDir' => './cache/'
);
$cache = new Cache_Lite($options);
$id = 1;
if ($data = $cache->get($id)) {
  echo 'Cache found'."\n";
  echo 'echo $data: '.$data."\n";
} else {
  $data = '"Cached string"';
  $cache->save($data);
  echo 'Cache not found, save new chache'."\n";
}

保存先が無くともデフォルトではエラーにならないので注意してください。

必要のなくなったキャッシュをcleanする

例えばキャッシュID=1のキャッシュがあったとして、ライフタイムが切れている場合、削除したくなる場合があります。

たとえばこのようなスクリプトを組めばランダムにキャッシュされるのでバラバラとキャッシュされたファイルが出来ます

require_once 'Cache/Lite.php';
 
$options = array (
  'lifeTime' => 5,
  'cacheDir' => './cache/'
);
$cache = new Cache_Lite($options);
$id = rand();
if ($data = $cache->get($id)) {
  echo 'Cache found'."\n";
  echo 'echo $data: '.$data."\n";
} else {
  $data = '"Cached string"';
  $cache->save($data);
  echo 'Cache not found, save new chache'."\n";
}

6回ほど実行するとこんな具合にどんどんcacheが蓄積されていきます。

% ls cache
cache_c21f969b5f03d33d43e04f8f136e7682_5a1a6a1270f29e8465664eb6377be5a5
cache_c21f969b5f03d33d43e04f8f136e7682_b09a5e90a744825f586b7fa65954af46
cache_c21f969b5f03d33d43e04f8f136e7682_dd21763abd6f8ba640620649bf9ff67b
cache_c21f969b5f03d33d43e04f8f136e7682_e62ca11321e81a07a5fca60a5e3d09ff
cache_c21f969b5f03d33d43e04f8f136e7682_f05999e1548739a61bf350dad408412d
cache_c21f969b5f03d33d43e04f8f136e7682_f8fec7023a1a25762f92a3eba5be989e

ここでライフタイム切れ(5秒に設定)してあるものを消す場合、以下のようなメソッドが利用できます。

$cache->clean(false, 'old');

cleanメソッドは引数を取らない場合全てのキャッシュを削除しにかかります。古いものだけ削除したい場合は以下のように第一引数にfalseを渡し、第二引数を「old」とする必要があります。 (第一引数は削除する「グループ」を指定するものですが、利用しない場合はfalseとしておきます。

この機能を自動実行する

オプションautomaticCleaningFactorを1にしてください

require_once 'Cache/Lite.php';
 
$options = array (
  'lifeTime' => 5,
  'cacheDir' => './cache/',
  'automaticCleaningFactor' => 1,
);
$cache = new Cache_Lite($options);
$id = rand();
if ($data = $cache->get($id)) {
  echo 'Cache found'."\n";
  echo 'echo $data: '.$data."\n";
} else {
  $data = '"Cached string"';
  $cache->save($data);
  echo 'Cache not found, save new chache'."\n";
}
//$cache->clean(false, 'old');

キャッシュIDを指定して削除する

remove()というメソッドが使えます。こんな感じ

boolean remove( string $id, [string $group = 'default'], [boolean $checkbeforeunlink = false])

キャッシュのオートシリアライズ

pear/cache_lite.txt · 最終更新: 2012/04/07 10:32 (外部編集)
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0