Blog
Blog

Blog

キャッシュで高速化(CakePHP)

2015年8月15日

nomura

cakephp

こんにちは、エンジニアの野村です。
暑い日が続きますね。休みの日は海でだらだらしたいです。

今回は前回インストールした memcachedCakePHP から使ってみたいと思います。

ちなみにサーバーは下記の環境で試しています。

・CentOS Linux release 7.1.1503 (Core)
・Apache/2.4.6 (CentOS)
・PHP 5.6.11 (cli)
・CakePHP 2.6.8

CakePHP の設定

CakePHP には様々なキャッシュが利用できるようになっており、app/Config/core.php で設定することができます。既に Core や Model などのキャッシュが設定されていますので、追加で Memcached 用の設定を行います。

Cache::config('default', array(
    'engine' => 'Memcached',
    'duration' => 86400,
    'probability' => 100,
    'prefix' => 'MYAPP_',
    'servers' => array(
        '127.0.0.1:11211'
    )
));

core.php コメントに設定例がありますので、それを参考に設定してみました。

engine には Memcached を設定します。
duration はキャッシュの有効期間で日数や週で設定することもできますが、数値を設定した場合は秒数となり、この場合は一日と同値です。省略すると一時間になるようです。
probability は有効期間を超えた場合に、キャッシュを削除する確率です。この場合は確率100%で削除を行います。
prefixmemcached に保存する際にキーの先頭に自動付与されます。memcached を専用で使用する場合は問題ないのですが、他のアプリケーションと共用する場合は必ず指定しておきましょう。
servers は配列で複数指定することができます。キャッシュデータへのアクセスを負荷分散できますが、今回はローカルのサーバーを指定しています。

CakePHP での使い方

CakePHP での使い方は簡単です。
読み込みは

Cache::read($key);

書き込みは

Cache::write($key, $data);

管理ツールなどからキャッシュしたデータの更新が行われた場合は、古いキャッシュを参照されないように更新後に該当するキーのデータを削除してしまいましょう。

Cache::delete($key);

頻繁にキャッシュを更新するようなデータやフリーワードの検索結果などのようにヒット率の低いデータは効果が表れにくいので、キャッシュするデータの更新頻度を調べてうまくデータベースの負荷を減らせるように実装したいですね。