memcachedをCakephpのCache機能経由で利用する

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を指定すればそのキャッシュデータを削除することができます。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

memcachedをCakephpのCache機能経由で利用するの記事にコメントを投稿