Zend_Cache を使ってみた。
ちょっとDB毎回見るには重いなーって処理があったので Zend Framework についてくる Zend_Cache を使用してキャッシュさせてみた。
Zend Framework: Documentation: Zend_Cache - Zend Framework Manualとりあえず使ってみる。
$config = new Zend_Config_Ini APPLICATION_PATH . '/configs/application.ini' ,'testing');
$frontendOptions = array(
'lifetime' => 86400,
'automatic_serialization' => true
);
$backendOptions = array(
'cache_dir' => $config->cache->path,
);
$cache = Zend_Cache::factory('Core',
'File',
$frontendOptions,
$backendOptions);
$key = 'foo';
if (!$cache->test($key)) {
echo "not cached yet\n";
$value = 'bar';
$cache->save($value, $key);
} else {
echo "cached\n";
$value = $cache->load($key);
}
var_dump($value);
キャッシュのタイプはファイルを使用,有効期限は一日,キャッシュはserializeして保存しています。
$cache->save(); メソッドの引数が $value が先にくるのがちょっと違和感...。
これを実行すると、以下のようになります。
$ php test_cache.php
not cached yet
string(3) "bar"
$ php test_cache.php
cached
string(3) "bar"
キャッシュが保存され、二回目の実行時にはキャッシュから読み込んでいます。
実際に保存されているデータを確かめて見る。
$ ls tmp/
zend_cache---internal-metadatas---foo zend_cache---foo
$ cat tmp/zend_cache---foo
s:3:"bar";
前述のオプション通り serialized されてます。
タグ付け
save()する際、キャッシュにキーとは別にタグをつける事ができます。
タグをつけると、指定したタグのみ削除といったことができます。
$cache->save($value, $key, array('hoge','fuga'));
キャッシュの削除
// $key のみ削除
$cache->remove($key);
// 全てのキャッシュを削除
$cache->clean(Zend_Cache::CLEANING_MODE_ALL);
// 有効期限切れのみ削除
$cache->clean(Zend_Cache::CLEANING_MODE_OLD);
// タグ hoge と fuga に該当するキャッシュを削除。
$cache->clean(
Zend_Cache::CLEANING_MODE_MATCHING_TAG,
array('hoge', 'fuga')
);
// タグ hoge にも fuga にも該当しないキャッシュを削除。
$cache->clean(
Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
array('hoge', 'fuga')
);
// タグ hoge または fuga に該当するキャッシュを削除。
$cache->clean(
Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
array('hoge', 'fuga')
);
remove($key) では $key だけ削除, Clean では条件によってまとめて削除する事ができます。タグは便利。
キャッシュの種類
キャッシュにはfile形式やmemcachedなどが使えます。一覧はZendFrameworkのソースコードを見て確認しました。
File
Sqlite
Memcached
Apc
ZendPlatform
Xcache
TwoLevels
よく使うのは File, Memcached, Apc あたりですね。ZendPlatform と Xcache は自分の場合まず使わないでしょう。
TwoLevels はちょっと面白くて二種類のキャッシュ形式を同時に使用できます。今回は使わないけど、覚えておくといつか使うかも?
こんなところかなー