キャッシュで高速化(CakePHP)
2015年8月15日
nomura
こんにちは、エンジニアの野村です。
暑い日が続きますね。休みの日は海でだらだらしたいです。
今回は前回インストールした memcached を CakePHP から使ってみたいと思います。
ちなみにサーバーは下記の環境で試しています。
・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%で削除を行います。
prefix は memcached に保存する際にキーの先頭に自動付与されます。memcached を専用で使用する場合は問題ないのですが、他のアプリケーションと共用する場合は必ず指定しておきましょう。
servers は配列で複数指定することができます。キャッシュデータへのアクセスを負荷分散できますが、今回はローカルのサーバーを指定しています。
CakePHP での使い方
CakePHP での使い方は簡単です。
読み込みは
Cache::read($key);
書き込みは
Cache::write($key, $data);
管理ツールなどからキャッシュしたデータの更新が行われた場合は、古いキャッシュを参照されないように更新後に該当するキーのデータを削除してしまいましょう。
Cache::delete($key);
頻繁にキャッシュを更新するようなデータやフリーワードの検索結果などのようにヒット率の低いデータは効果が表れにくいので、キャッシュするデータの更新頻度を調べてうまくデータベースの負荷を減らせるように実装したいですね。