Redis(レディス)をキャッシュとして使う基本ガイド!初心者でもわかる高速化の仕組み
生徒
「最近よく『Redis(レディス)』っていう言葉を聞くんですけど、これって何なんですか?」
先生
「Redisは、データをめちゃくちゃ速く出し入れできる『魔法のメモ帳』のようなものです。普通のデータベースが重い本棚だとしたら、Redisは机の上に置いた付箋(ふせん)のようなイメージですね。」
生徒
「速いのは嬉しいですけど、普通のデータベースと何が違うんですか?」
先生
「普通のデータベース(MySQLなど)はハードディスクという場所にデータを保存しますが、Redisは『メモリ』という場所に保存します。だから読み書きが圧倒的に速いんです。今日はその中でも一番有名な『キャッシュ』という使い方を学びましょう。」
1. Redisとは何か?なぜキャッシュが必要なの?
Redis(Remote Dictionary Server)は、オープンソースのデータ構造サーバーです。簡単に言うと、「超高速なデータベース」のことです。パソコンやスマートフォンでウェブサイトを見るとき、裏側ではデータベースから情報を探しています。しかし、利用者が増えると、データベースが「もう無理!」と悲鳴を上げて、サイトの表示が遅くなってしまいます。
そこで登場するのが、キャッシュ(Cache)という仕組みです。一度調べた情報を一時的に「覚えやすい場所」に置いておき、二回目からはそこからサッと取り出す。これがRedisの得意技です。例えば、料理のレシピを毎回分厚い本で調べるのではなく、よく使うレシピだけを冷蔵庫に貼っておくような感覚ですね。
パソコンの中で、一時的に作業内容を広げておく「作業机」のことです。ハードディスク(本棚)よりもはるかに速く読み書きできますが、電源を切ると中身が消えてしまうという特徴があります。
2. 基本的な考え方:キャッシュの仕組み
Redisをキャッシュとして使う場合、以下のような流れで動きます。
- ユーザーが「このデータを見せて!」とリクエストする。
- まず、Redis(高速なメモ帳)にそのデータがあるか確認する。
- あれば、そのデータをすぐに返す(爆速!)。
- なければ、普通のデータベース(本棚)に探しに行く。
- データベースから見つけたデータを、Redisにコピーして保存(キャッシュ)しておく。
- ユーザーにデータを返す。
こうすることで、次に同じリクエストが来たときには、重いデータベースを見に行かずに済みます。ウェブサイトの高速化には欠かせない技術です。
3. 【実践】Redisにデータを保存してみよう(SETとGET)
Redisは「キー(名前)」と「値(中身)」をセットで保存する、Key-Value Store(KVS)という形式を使います。まずは一番シンプルな、文字列を保存して取り出す方法を見てみましょう。
例えば、サイトの「お知らせ」メッセージをキャッシュに保存する場合を想定します。
保存する前の状態(空っぽ)
キー (Key) | 値 (Value)
-----------+-----------
(データなし)
データを保存するコマンド(SET)
Redisでは「SET」という命令を使って、キーと値を登録します。ここでは「notice」というキーに、お知らせの内容を保存します。
SET notice "本日はメンテナンスのため、22時に終了します。"
データを取得するコマンド(GET)
保存したデータを取り出すには「GET」を使います。
GET notice
実行結果
"本日はメンテナンスのため、22時に終了します。"
このように、名前(キー)を指定するだけで、中身(値)を瞬時に取り出すことができます。これがRedisの基本です。
4. 有効期限を設定する(EXPIRE)
キャッシュはずっと残しておけばいいわけではありません。古い情報がいつまでも残っていると、最新の情報が表示されなくなってしまいます。例えば、「10分間だけ有効なタイムセール情報」などを扱うときに便利なのが有効期限(EXPIRE)です。
Redisでは、データに「寿命」を設定できます。時間が経つと自動的に消えてくれるので、メモリがいっぱいになるのを防ぐことができます。
10秒間だけ有効なデータを保存する
「EX」というオプションを使うと、秒単位で期限を決められます。ここでは「token」というキーに、秘密のコードを10秒間だけ保存してみます。
SET token "SECRET_12345" EX 10
このコマンドを実行した直後に GET すると値が返ってきますが、10秒待ってから GET すると、データが消えて何も表示されなくなります。
10秒後の状態
GET token
(nil)
※「(nil)」というのは、プログラミングの世界で「何もないよ」という意味です。自動で掃除してくれるので、とても便利ですね。
5. キャッシュの活用例:ランキング情報の保存
次に、もう少し複雑な例を見てみましょう。ウェブサイトでよく見る「人気記事ランキング」などは、計算に時間がかかるため、Redisにキャッシュしておくのに最適です。
まず、元のデータベース(MySQLなど)に保存されている、記事ごとのアクセス数データを見てみましょう。
元のデータベース(記事テーブル:articles)
id | title | views | category
---+------------------+-------+----------
1 | Redis入門 | 1500 | 技術
2 | SQLの基本 | 1200 | 技術
3 | 初心者のパソコン | 800 | 生活
4 | 美味しい珈琲 | 2000 | 趣味
5 | 旅行の持ち物 | 950 | 生活
このテーブルから「アクセス数(views)が多い順」に並べ替えて表示するのは、データが数万件になると時間がかかります。そこで、ランキングの結果をまるごとRedisにキャッシュします。
ランキング結果をJSON形式でキャッシュ保存
「ranking_top3」というキーに、1位から3位までのデータをまとめて保存します。
SET ranking_top3 "[{'id':4, 'title':'美味しい珈琲'}, {'id':1, 'title':'Redis入門'}, {'id':2, 'title':'SQLの基本'}]"
Redis内のデータ状態
キー (Key) | 値 (Value)
----------------+--------------------------------------------------------------
ranking_top3 | [{'id':4, 'title':'美味しい珈琲'}, {'id':1, 'title':'Redis入門'}, ...]
notice | 本日はメンテナンスのため、22時に終了します。
これで、トップページを表示するたびに重いデータベースに計算をさせなくても、Redisから「ranking_top3」を呼び出すだけで、一瞬でランキングが表示できるようになります。
6. Redisを導入するメリットと注意点
ここまで読んで、「全部Redisに入れればいいんじゃない?」と思ったかもしれません。しかし、Redisにはメリットと、気をつけるべきポイントがあります。
- 圧倒的な速さ: ミリ秒以下の速さで応答します。
- サーバーの負荷軽減: メインのデータベースを守ります。
- 多様なデータ形式: 文字だけでなく、リストやセットも扱えます。
- メモリ容量の制限: メモリは高価なので、大量の保存には向きません。
- データの消失: 電源断などでデータが消える可能性があります(設定によります)。
- 情報の鮮度: キャッシュが古いと、間違った情報を表示してしまいます。
7. どんな時にキャッシュを使うべき?
「キャッシュ」を使うべき代表的なシーンは以下の通りです。
- 何度も同じ質問が来るデータ: サイト設定、人気記事、商品カテゴリー一覧など。
- 計算が大変なデータ: ランキング、合計金額の集計、複雑な検索結果など。
- 変更が少ないデータ: ユーザーのプロフィール情報、都道府県リストなど。
逆に、銀行の残高や注文履歴など、「絶対に消えてはいけない」「常に最新である必要がある」データは、まず普通のデータベース(MySQLやPostgreSQL)に保存し、補助としてRedisを使うのが一般的です。
Redisを使いこなせるようになると、あなたが作るアプリやウェブサイトは、驚くほどサクサク動くようになります。まずは「SET」と「GET」という、この二つの魔法の言葉を覚えるところからスタートしましょう!