Cache::configでCakephpシステムのキャッシュ機構を制御
Cakephpにはシステム全体で柔軟に制御できるデータキャッシュの仕組みが備わっていて、
File
APC
Xcache
memcache
Wincache
などのキャッシュエンジンを利用できるようになっている。本エントリーでは、
Cakephp純正のキャッシュエンジン制御機能 + memcached
という組み合わせでデータのキャッシュを行う方法について書いてみたい。
core.phpでmemcachedを使用可能な状態にする
以後の設定はCakephpバージョン2.3.6環境で行った例である。
Cakephp標準のキャッシュエンジンはFileに設定されている。memcachedを利用して任意のデータを格納するには、core.phpの最後に以下のコードを追記する。
Cache::config('default', array( 'engine' => 'Memcache', 'duration' => 3600, 'probability' => 100, 'prefix' => Inflector::slug(APP_DIR) . '_', 'servers' => array( '127.0.0.1:11211' ), 'persistent' => true, 'compress' => false, ));
上の設定を追記することでmemcachedが有効になる(サーバ側でmemcahcedを有効にする作業とphpでmemcahcedを利用可能にする設定は別途必要)。
キャッシュの書き込みと読み込み
Cache::read(‘key_name’)
Cakephp純正のキャッシュデータ読み取り機能がCache::read。key_nameは開発者が任意に設定可能。当然だが、readするには事前にwriteしておく必要がある。
Cache::write(‘key_name’, $data)
Cache::writeでは、key_nameのほかキャッシュするデータを第二引数として指定可能。
具体的な使用方法
if( !Cache::read('category_tree') or !Cache::read('categoryList') ) { //echo "aa"; $this->loadModel('Category'); $category_tree = $this->Category->find('threaded'); $categoryList = $this->Category->generateTreeList(null, null, null, '----> '); Cache::write('category_tree', $category_tree); Cache::write('categoryList', $categoryList); } else { //Cache::delete('category_tree'); $category_tree = Cache::read('category_tree'); $categoryList = Cache::read('categoryList'); }
Cache::readとCache::writeを使ってカテゴリ情報を扱っている例です。
php_memcachedエクステンションを利用したやり方だけでなく、Cakephpのキャッシュエンジン経由でmemcachedを利用する方法もあります。Cache::deleteに削除したデータのkeyを指定すればそのキャッシュデータを削除することができます。