CodeIgniterでMemcachedを検証する
CodeIgniterでMemcachedの利用前後での速度比較を行いました。
サーバにMemcachedが導入され、PHPと連携ができていることを前提に今回の記事を書いています。
まだできていない方は、前回書いた記事を参考にMemcachedのPHPとの連携まで行ってください。
環境
- Vagrantで構築
- CodeIgniter Version 3.1.0
Memcachedが利用できるか確認
application/config/memcached.phpに以下を追記します。
['memcached']以外のところはデフォルトですでに記述されています。
$config['memcached'] = array(
'default' => array(
'hostname' => '127.0.0.1',
'port' => '11211',
'weight' => '1',
),
);
適当なコントローラーに以下のようなコードを書いて、Memcachedドライバーが利用できるか確認します。
public function index() {
$this->load->driver('cache', array('adapter' => 'memcached'));
if ($this->cache->is_supported('memcached')) {
var_dump("成功");
} else {
var_dump("失敗");
}
}
検証用コード
Memcachedにkey名がcountのデータがないときに、1億回ループした値を保存しています。 既にデータが保存されている場合は、保存されている値を表示させます。 今回、CI_Benchmarkクラスを利用してベンチマークを取っています。
public function index()
{
$this->load->driver('cache', array('adapter' => 'memcached'));
$this->benchmark->mark('my_mark_start');
if (!$count = $this->cache->get("count")) {
$count = 0;
//1億回ループ
for ($i = 0; $i < 100000000; $i++) {
$count += 1;
}
//キャッシュに60秒保持
$this->cache->save("count", $count, 60);
}
$this->benchmark->mark('my_mark_end');
print "カウント数:" . $count . "<br />";
print "秒数:" . $this->benchmark->elapsed_time('my_mark_start', 'my_mark_end');
}
検証結果
Memcached利用前後での処理速度の結果です。 1億回のループ分早くなっていることが分かります。 サイトパフォーマンス的にキャッシュは本当偉大ですね。
Memcached利用前

Memcached利用後

まとめ
過去に検証した、CodeigniterのWebページキャッシュに比べ、apiのレスポンス単位でキャッシュができるので、使い勝手が良さそうです。 キャッシュするときのkey名や保持する時間に関しては、導入するサイト毎でどうするか考える必要がありますね。
Memcachedは少し前まではよく聞くワードだったのですが、最近はRedisの方がよく聞きます。 今後、CodeigniterのRedisを使ったキャッシュの検証やMemcachedを利用したときの違いなどを調査してみたいと思います。