PHP PEARのCache_Liteでキャッシュする

PHPでキャッシュしたいときに、良くお世話になるPEARのCache_Liteの使い方メモ。使えるパラメータで知らないものが案外多かった。

基本的な使い方、インストール&導入

PEARのパッケージマネージャが入っていれば、「pear install Cache_Lite」でインストールできる。
あるいは、Cache_Lite Downloadでファイルをダウンロードし、解凍してからサーバーの適当な場所にアップロードして、「require_once(“~./Cache/Lite.php”)」とすれば、
Cache_Liteが使えるようになる。

基本的な使い方は、

require_once("Cache/Lite.php");
$cacheoptions = array(
"cacheDir" => "cache/",
"lifeTime" => 3600,
"automaticCleaningFactor" => "20",
);
$cache = new Cache_Lite($cacheoptions);

//Cacheするデータを見分ける一意的な名前
$id="id_name";

if ($cacheData = $cache->get($id)) {
    //Cacheしたファイルがあるとき
    $cacheData = unserialize($cacheData);
}else{
    //Cacheしたファイルがないとき
    //キャッシュファイルにデータを保存する
    $savedata="保存するデータ(配列なども可能)";
    $cache->save(serialize($savedata), $id);
}

ディレクトリ「cache」を作って、書き込みの権限を与えておけば、
「cache」内にファイルが作成されるはず。

「$cacheoptions」でキャッシュの仕方を設定する。
「cacheDir」は、ファイルをキャッシュするデイレクトリ、
「lifeTime」はキャッシュしたファイルを保存する時間。

「automaticCleaningFactor」は、デフォルトで0が設定され、
期限の切れた古いキャッシュファイルはそのまま残る設定になっている。
1以上の整数を入れると、自動的に古いCacheが削除される
(整数nを設定すると、n回に1回の割合でファイルの整理がされる。
数字が小さいほど、ファイルが削除されやすい)。

キャッシュするデータが単なる文字列であれば、unserialize()も、
serialize()も必要ない。
配列などのデータを保存したい場合は、シリアライズしないとデータがファイルに書き込めない。

Cache_Liteで使えるパラメータ

キャッシングのときに設定できるパラメータで使いそうなものの一覧。

パラメータ
[デフォルトの値]説明
cacheDir
[/tmp/]キャッシュを保存するディレクトリ
lifeTime
[3600]
automaticCleaningFactor
[0]自動クリーニング。古いキャッシュをを削除するか。
readControlType
[crc32]読み込みの制御。他に、md5,strlenも設定可。md5,crc32,strlenの順に安全性は高いが、逆にパフォーマンスは低くなる。
automaticSerialization
[FALSE]自動的にデータのシリアライズをするか。TRUEで、保存データのシリアライズは必要なくなる。
hashedDirectoryLevel
[0]Cacheファイルをディレクトリ構造で保存するか。整数1につき、階層1つ。

Group化してキャッシュ

キャッシュは、グループで分けることもできる。

上の例で、$groupを指定すればいい。
デフォルトで省略した場合だと、$group=”default”となっている。

$cache->get($id,$group));
$cache->save(serialize($savedata), $id,$group);

作成されるCacheファイルの名前は、$group+$idから決定される。

「”cacheDir” => “cache/$group/”」とか、「”hashedDirectoryLevel” => ~」で適当なディレクトリにCacheが作れる。

cleanとremoveでキャッシュの削除

僕は、使ったことはないけれど、
clean()とremove()でキャッシュを指定して削除できるみたいです。

$cache->remove($id,$group="default");
$cache->clean($group="default",$mode='ingroup');

$modeは「old」、「ingroup」、「notingroup」から指定できる。

  • old 古いキャッシュをクリア
  • ingroup 指定されたグループ内のキャッシュをクリア
  • notingroup 指定されたグループ内以外のキャッシュをクリア

ページをキャッシュする

Cache/Lite.phpは、ページ内の一部のデータを保存するという感じですが、
ページの一部を保存するのに、Cache/Lite/Output.phpも用意されています。

require_once("Cache/Lite/Output.php");
$cacheoptions = array(
"cacheDir" => "cache/",
"lifeTime" => 3600,
"automaticCleaningFactor" => "20",
);
$cache = new Cache_Lite_Output($cacheoptions);

//Cacheするデータを見分ける一意的な名前
$id="id_name";

if (!$cache->start($id)) {
    //キャッシュしたいページの部分
    $savedata=date("G:i:s");
    $cache->end();
}

start()は、$idと$groupが指定できます。

PHP PEAR 参考にした本

PEAR入門 PHP標準ライブラリを極める!
PEAR入門 PHP標準ライブラリを極める!

PEAR::DBとか、PEAR::Pager、PEAR::XML_Serializerとかも、いろいろ載っていた。
php5は、simplexmlがあるからいいのだけれど、
php4ではPEAR::XML_Unserializerが結構便利。

Leave a Reply

Your email address will not be published. Required fields are marked *