ホーム > 日記 > EthnaプラグインCachemanagerの使い方

EthnaプラグインCachemanagerの使い方

簡単な使い方


// このキャッシュKeyを設定する
$cache_key = '123';

// Cachemanager オブジェクトを生成する
$plugin =& $this->backend->getPlugin();
$cache_manager =& $plugin->getPlugin('Cachemanager', 'Localfile');

// このKeyに対する有効なキャッシュがあるかどうかテストする
if ($cache_manager->isCached($cache_key) { // キャッシュがヒットした !
    $data = $cache_manager->get($cache_key);
} else { // 有効なキャッシュが見つからなかった
    $data = 'hoge';
    // データをキャッシュする
    $cache_manager->set($cache_key);
} 

実際使うとなるとこんな感じです。


// キャッシュマネージャオブジェクトを生成する
$plugin =& $this->backend->getPlugin();
$cache_manager =& $plugin->getPlugin('Cachemanager', 'Localfile');

// Services_Amazonオブジェクトを生成する
$ecs4 =& new Services_AmazonECS4('access_key_id', 'associate_id');
$search_index = 'Books';
$options = array(
    'ResponseGroup' = 'Large',
    'Keywords'      = 'Ethna',
);

// 一意となるキャッシュキー(文字列)を生成する
$cache_key = md5('ItemSearch' . $search_index . serialize($options));
$cache_lifetime = 3600;
$cache_namespace = 'Services_Amazon';

// 有効なキャッシュが存在するか確認する
if ($cache_manager->isCached($cache_key, $cache_lifetime, $cache_namespace)) {
    // キャッシュを取得する
    $result = $cache_manager->get($cache_key, $cache_lifetime, $cache_namespace);
    if (!Ethna::isError($result)) {
        // キャッシュデータをセットしViewへ遷移
        $this->af->setAppNe('amazon_items', $result);
        return 'amazon_search';
    }
}

// データの取得
// 実際はここでServices_Amazonオブジェクトを生成すべき
$result =& $ecs4->ItemSearch($search_index, $options);
// キャッシュへ保存
$cache_manager->set($cache_key, $result, $cache_lifetime, $cache_namespace);

// 取得データをセットしViewへ遷移
$this->af->setAppNe('amazon_items', $result);
return 'amazon_search'; 

いや、ほんとは適当に書いたのでsyntaxエラーすらチェックしてません。
上記の例ではCachemanager_Localfileを利用していますが、Cachemanager_Memcachedでもそのまま利用できます。
namespace丸ごとキャッシュ削除や、JoJoに古いor利用されていないキャッシュが削除されていく機能は実装されていませんので、誰かがんばれ。
クラスリファレンスはあるから、wikiに必要なのはこの程度の利用法だけでいいのかな。
誰か修正してくれるだろうし、もうちょいまともにしてから投げます。

カテゴリー: 日記 タグ:
  1. 2010 年 10 月 7 日 14:31 | #1

    こんにちは、はじめまして^^
    随分昔の記事ですが、Googleで検索し今更ながら参考にさせていただきました。

    一点はまった点がありましたので、コメントさせていただきます。
    $cache_manager->set($cache_key, $result, $cache_lifetime, $cache_namespace);
    の第3引数は最終更新時刻のセットだったので、最初このソースに合わせててうまくいかずアワワしてました^^;
    nullにしたらうまくいってくれたという感じです。
    ではでは

  1. トラックバックはまだありません。