Nullyのぶろぐ

仙台から東京へ転勤したエンジニアのブログ

バージョン1.6.2のZend_Cacheを利用してみた

どーもDBからデータを引き出すのが激しくなりそうなので、パフォーマンス向上を狙い、Zend_Cacheを利用してみました。

Zend_Cacheって?

名前から推測出来る通り、キャッシュシステムです。

デフォルトの状態でもだいぶ使えるような構成になっており、最低2つの引数を指定する事で動作します。

準備

利用する場所はControllerでもModelでもかまいません。

利用するAction又は、Modelメソッド内に以下のように記述します。

$cache = Zend_Cache::factory(FrontEndName, BackEndName,[FrontEndOptions, [BackEndOptions]]);

ここで出てきた、FrontEndNameとBackEndNameは、Zend Framework公式にも記述されている通り、それぞれ6つほどのキャッシュエンジンを利用出来ます。

指定の仕方は、双方とも、最後のアンダースコア以降の文字列(ClassやFunction、File・Memcachedなど)です。

実際に使ってみる

実際に導入する際の例を挙げてみます。

Controller若しくは、Modelの利用したい箇所に以下の用に記述してみます。

今回は両方の想定で、FrontEndNameにはClass、BackEndNameにはFileを利用しています。

※オプションなどは公式を参照して下さい。

以下はControllerで利用する例です。

public function hogeAction() {

: // 何かおもい処理を行います(Zend_Formですごく長いフォームを生成してみるなど)

: // 今回はメチャクチャなフォームを生成しようと想定しています

$frontOpt = array(

"cached_entity" => new My_Form()

) ;

$cacheId = "My_Form" ; // キャッシュする際につける一意なID(名前)

$cache = Zend_Cache::factory("Class", "File", $frontOpt, $backOpt);

$form = $cache->load($cacheId) ; // 指定したキャッシュIDで存在しなければfalseが返ります

if($form === false)

// __constructでフォームを生成してない仕様の為createメソッドを呼び出しています

$form = $cache->create() ;

// 生成された結果をキャッシュとして保存します

$cache->save($form, $cacheId) ;

}

$this->view->form = $form ;

}

使ってみて

公式を見ても分かりづらいのですが、必ずキャッシュは保存するようにしないと動かない(当たり前か・・・)ので、必ず、loadを呼び出し、データの存在有無を確認する処理が必要になります。

恐らく

Memcachedが一番最速だとは思いますが、検証していない&環境が無いため、確認とれずでした。