CodeIgniterでRedisキャッシュを導入!初心者でも速度爆速にする設定方法
生徒
「CodeIgniterで作ったサイトの表示が遅い気がします。もっと速くする方法はありますか?」
先生
「そんな時は『キャッシュ』という仕組みを使うと良いですよ。特に『Redis(レディス)』という道具を使うと、驚くほど速くなります。」
生徒
「レディス?難しそうですが、私にも設定できますか?」
先生
「設定自体はとてもシンプルです。まずはキャッシュの基本から一緒に学んでいきましょう!」
1. キャッシュとRedisの基本を知ろう
プログラミングの世界でよく聞くキャッシュとは、一度計算した結果や、データベースから読み込んだ情報を「一時的にメモしておく場所」のことです。例えば、あなたが何度も同じ料理のレシピを本で調べるのは大変ですよね?一度作ったレシピをメモ用紙に書いて冷蔵庫に貼っておけば、次からは本を開かずにすぐ料理が作れます。これがキャッシュの仕組みです。
そして、今回の主役であるRedis(レディス)は、そのメモ用紙を「ものすごいスピードで読み書きできる特別なノート」のようなものです。パソコンのメモリという、非常に動作が速い場所にデータを保存するため、通常のファイルに保存するよりも圧倒的に高速に動作します。
PHPの人気フレームワークであるCodeIgniter(コードイグナイター)は、このRedisと非常に相性が良く、簡単な設定だけでWebサイトのパフォーマンスを向上させることができます。初心者の方でも、一つずつ手順を踏めば必ず導入できるので安心してくださいね。
2. Redisを導入するメリット
なぜ多くのエンジニアがRedisを使うのでしょうか。それは、単に速いだけでなく、パソコンやサーバーへの負担を減らすことができるからです。通常、Webサイトが表示されるときは、裏側でデータベース(情報の倉庫)に何度も問い合わせを行います。しかし、アクセスが集中すると、この倉庫がパンクしてサイトが動かなくなってしまいます。
ここでRedisが登場します。Redisはインメモリデータベースと呼ばれ、すべてのデータをパソコンの脳に近い「メモリ」で管理します。ハードディスクに書き込む作業がないため、読み込み速度がミリ秒単位で短縮されます。これにより、ユーザーはストレスなくサイトを閲覧でき、Googleなどの検索エンジンからも「このサイトは速くて優秀だ」と評価されやすくなるのです(これをSEO対策と呼びます)。
3. CodeIgniterの設定ファイルを準備する
それでは、具体的にCodeIgniterでRedisを使うための準備をしましょう。まずは、設定ファイルを書き換える必要があります。初心者の方にとって「設定ファイル」と聞くと難しく感じるかもしれませんが、決まった場所に決まった文字を書き込むだけなので、パズルのようなものです。
編集するファイルは app/Config/Cache.php です。このファイルの中に、キャッシュを何で動かすか(ハンドラ)を指定する場所があります。デフォルトでは「file」になっていることが多いですが、ここを「redis」に変更します。まずは、設定の書き方の例を見てみましょう。
// app/Config/Cache.php の中身をイメージしたコード
public $handler = 'redis';
public $redis = [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'timeout' => 0,
'database' => 0,
];
上記のコードにある host は、Redisが動いている場所の住所のようなものです。自分のパソコンで動かしている場合は 127.0.0.1 という数字をよく使います。port の 6379 は、Redis専用の入り口番号だと思ってください。
4. 実際にデータを保存してみよう
設定ができたら、次はプログラムの中で実際にデータを保存してみましょう。CodeIgniterでは cache() という便利な機能(関数)が用意されています。これを使えば、誰でも簡単にRedisへデータを預けることができます。
例えば、あなたの名前を「お気に入り」として1時間だけ保存するプログラムを書いてみます。保存するときは save という命令を使います。第一引数に「ラベル(名前)」、第二引数に「保存したい中身」、第三引数に「何秒間保存するか」を指定します。3600秒は1時間のことですね。
// データをRedisに保存する
cache()->save('user_name', 'たろう', 3600);
echo 'データを保存しました!';
このコードを実行すると、Redisという高速メモ帳に「user_name は たろう です」と書き込まれます。たったこれだけで、次回からはデータベースを見に行かなくても、Redisから瞬時に名前を取り出せるようになります。
5. 保存したデータを取り出す方法
保存したデータを取り出すときは get という命令を使います。これは、先ほど付けた「ラベル」を指定するだけで、中身を返してくれる仕組みです。もしメモが存在しない場合は、何もないことを意味する null という値が返ってきます。
以下の例では、もし保存された名前があれば表示し、なければ「データがありません」と表示するプログラムです。条件分岐の if文 と組み合わせて使うのが一般的です。
// Redisからデータを取り出す
$name = cache()->get('user_name');
if ($name) {
echo 'こんにちは、' . $name . 'さん!';
} else {
echo 'データが見つかりませんでした。';
}
実行結果は以下のようになります。もし事前に「たろう」を保存していれば、名前が表示されます。このように、一度保存したものを必要な時にサッと取り出せるのが、キャッシュの最大の魅力です。
こんにちは、たろうさん!
6. 不要になったキャッシュを消去する
キャッシュは便利ですが、ずっと残しておくと困ることもあります。例えば、ユーザーが名前を変更したのに、古い名前がキャッシュに残っていると、画面に表示される情報が古くなってしまいます。そんな時は、特定のキャッシュを消す delete 命令や、すべてのキャッシュを空にする clean 命令を使います。
以下のコードは、特定のラベルのデータを削除する例です。お掃除もプログラミングの大切な要素です。整理整頓を心がけることで、バグ(プログラムのミス)の少ないシステムを作ることができます。
// 特定のデータを削除する
cache()->delete('user_name');
// すべてのキャッシュをまとめて消去する
// cache()->clean();
echo 'キャッシュをきれいに削除しました!';
この操作を行うと、Redisの中にある「user_name」というメモが破棄されます。次に get を行ってもデータは見つからなくなるため、最新の情報をデータベースから取得し直すきっかけを作ることができます。
7. Redis導入時に初心者が注意すべきポイント
ここまで順調に進んできましたが、一つだけ注意点があります。それは「Redis自体がインストールされているか」という点です。CodeIgniterの設定をどれだけ正しく書いても、サーバーの中にRedisというソフトが動いていなければエラーになってしまいます。
もし自分でパソコンにインストールするのが難しい場合は、レンタルサーバーなどの管理画面で「Redisを利用する」といったチェックボタンを探してみてください。また、PHPからRedisを操作するための「phpredis」という拡張機能が必要になることもあります。これは、PHPとRedisが会話するための「通訳さん」のような存在です。
最初は「なんだか難しそう」と感じるかもしれませんが、エラーメッセージが出たときは、その文章をそのまま検索してみてください。世界中のエンジニアが同じ悩みを通ってきているので、解決策は必ず見つかります。一歩ずつ、確実に進んでいきましょう。
8. 実践的な使い方:ページの表示を速くする
最後に、もう少し実践的な例を紹介します。Webサイトで一番時間がかかるのは「複雑な計算」や「大量のデータ取得」です。これらをまるごとキャッシュしてしまいましょう。例えば、ニュース一覧を表示する際に、毎回データベースを見に行くのではなく、5分間だけRedisに保存しておく手法です。
これを行うことで、1秒間に100人がアクセスしてきても、データベースにアクセスするのは5分に1回だけで済みます。残りの時間はすべてRedisが高速に返答してくれるため、サーバーが重くなるのを防ぐことができます。
// ニュース一覧をキャッシュする高度な例
$news_list = cache()->get('top_news');
if (! $news_list) {
// キャッシュがない場合のみ、重い処理(例:DB取得)を行う
// $news_list = $newsModel->findAll();
$news_list = '最新ニュースの記事データ一式';
// 300秒(5分)保存する
cache()->save('top_news', $news_list, 300);
}
echo $news_list;
このように、「無ければ作る、あれば使う」という流れを覚えるだけで、あなたの作るWebアプリケーションの品質はプロレベルに近づきます。Redisを活用して、ユーザーにとって心地よい爆速サイトを目指してみてください。