目次
Redisとは?
Redis(レディス)は、データを主にメモリ上に保存する高速なキー・バリュー型のNoSQLデータベースです。
名前はRemote Dictionary Serverに由来します。アプリケーションの処理を速くするために、キャッシュやセッション管理などで使われます。
イメージは、よく使う情報をすぐに取り出せる、手元の作業机です。必要な情報を近くに置くことで、毎回大きな保管庫を探す手間を減らせます。
1. 基本の仕組み:キーと値で保存する
Redisは、データを「キー(名前)」と「値(データ)」の組み合わせで保存します。アプリケーションがキーを指定すると、対応する値を取得できます。
| キー | 値の例 | 意味 |
|---|---|---|
| user:1001:name | 田中 | ユーザー1001の名前 |
| user:1001:age | 30 | ユーザー1001の年齢 |
| session:abc123 | ログイン情報 | セッションに対応する情報 |
キーに含めた : は、名前を整理するための区切りとして使っています。: を使うかどうかも、キーをどのような名前にするかも、開発者側で決められます。
Redisは主にメモリからデータを読み書きするため、短い応答時間を得やすいのが特徴です。有効期限(TTL)を付けて、一定時間後にデータを自動削除することもできます。
2. 主な利用例
| 用途 | 保存するもの・利用場面 | 得られる効果 |
|---|---|---|
| キャッシュ | 商品情報やデータベースの検索結果 | 応答を速くし、データベースの負荷を減らす |
| セッション管理 | ログイン中のユーザー情報 | 複数のWebサーバーでログイン状態を共有する |
| ランキング | ゲームの得点とユーザーID | 上位一覧や順位を効率よく取得する |
| カウンター | Webサイトのアクセス数 | 複数のアプリからの増分をまとめて管理する |
| アクセス回数の制限 | 一定時間内のAPI呼び出し回数 | 呼び出しが多すぎる利用者を制限する |
| キュー | メール送信など、処理待ちのジョブやメッセージ | 別のプログラムが後から処理する |
| 一時的なロック | ある処理を実行中であることを示す情報 | 複数サーバーによる同じ処理の同時実行を抑える |
キューで使う場合は、失敗時の再実行や重複処理への対策も設計します。一時的なロックは、有効期限や障害時の動作を考慮する必要があります。
3. キャッシュとして使う流れ
毎回データベースを検索する代わりに、一度検索した結果をRedisに一時保存します。例えば、商品ページの表示で利用できます。
1回目:キャッシュなし
- データベースから取得
- アプリがRedisを確認する
- データがないため、データベースを検索する
- 取得した結果をRedisに保存する
- 利用者に結果を表示する
2回目以降:期限内・キャッシュあり
Redisから取得
- アプリがRedisを確認する
- 保存済みの結果を取得する
- 利用者に結果を表示する
- 同じ情報を取得するための、データベースへの問い合わせを省けます。
例:商品情報を60秒間だけ保存する
| SET product:1001 "商品A:1,000円" EX 60 GET product:1001 |
SETは保存、GETは取得、EX 60は有効期限を60秒にする指定です。期限が切れた後は、再びデータベースから取得して保存します。
4. Redisが扱える代表的なデータ構造
キーに対応する値には、単純な文字列だけでなく、用途に合ったデータ構造を利用できます。
| データ構造 | 特徴 | 利用例 |
|---|---|---|
| 文字列(String) | 文字列や数値を保存する | キャッシュ、カウンター |
| リスト(List) | 順番のあるデータの並び | 処理待ちデータ |
| 集合(Set) | 重複しない値の集まり | 参加者IDの一覧 |
| 順序付き集合(Sorted Set) | 値にスコアを付けて並べる | ゲームの得点ランキング |
| ハッシュ(Hash) | 複数の項目と値をまとめる | ユーザーの名前・年齢など |
| ストリーム(Stream) | ID付きの記録を順次追加する | イベントやメッセージの処理 |
5. MySQL・PostgreSQLなどとの違い
| 項目 | Redis | MySQL・PostgreSQLなど |
|---|---|---|
| 主な保存・処理の基盤 | 主にメモリ。ディスクへの永続化も可能 | ディスクへの永続保存が基本。メモリのキャッシュも活用 |
| 処理の得意分野 | キーによる取得や専用のデータ操作を低遅延で行う | 条件を組み合わせた検索、集計、表の結合 |
| データの扱い方 | キーと値が中心 | 表・行・列が中心 |
| 複雑な検索 | 基本のキー操作だけでは対応しにくい | SQLで柔軟に記述できる |
| 代表的な用途 | キャッシュ、セッション、一時データ | 顧客・注文などの業務データ |
実際の速度は、処理内容、データ量、ネットワーク、構成によって変わります。
Redisを主なデータベースとして使う設計もありますが、保存するデータの重要性に合わせた永続性と復旧の設計が必要です。
6. 利用するときの注意点
障害・再起動でデータを失う可能性
メモリだけに保存したデータは、プロセス停止などで失われます。ディスクへの永続化を設定していても、方式や保存タイミングによって直近の更新が失われる可能性があります。
永続化の方法
RDBはある時点のデータをスナップショットとして保存し、AOF(※)は書き込み操作を記録します。用途に合わせて設定します。
※AOF(Append Only File)は、Redisで行ったデータの書き込み操作を、ディスク上のファイルに記録する仕組みです。
メモリ容量
保存するデータが増えるほどメモリが必要です。上限に達した場合、設定によってデータの追い出しや書き込みエラーが発生します。
用途ごとの保存方針
再取得できるキャッシュと、失うと困るセッション・処理待ちデータでは、同じデータ削除方針が適さないことがあります。
重要なデータの保護
永続化、バックアップ、レプリケーション、自動切り替え、復旧手順を検討します。クラスタ構成だけでデータ消失を防げるわけではありません。
関連の記事
