Redis
Redisとは
Redis(レディス)は、データをメモリ上に置いて動く超高速なキーバリューストアです。[[NoSQL]] の一種で、ディスク中心の一般的なデータベースに比べて桁違いに速く読み書きできます。読みは「キーを渡して値をもらう」だけのシンプルな操作が基本です。
SET user:1:name "田中" # キーに値を保存
GET user:1:name # → "田中"
EXPIRE user:1:name 3600 # 3600秒後に自動削除(TTL)
TTL(有効期限)をキーごとに設定でき、期限が切れたデータは自動で消えます。この性質がキャッシュ用途と相性抜群です。
豊富なデータ構造
単純な文字列だけでなく、用途に直結するデータ構造を標準で持っています。
| 構造 | 用途の例 |
|---|---|
| String | キャッシュ、カウンタ |
| List | 簡易的なキュー(タスクの待ち行列) |
| Hash | オブジェクトのフィールドまとめ保存 |
| Set | タグ、重複のない集合 |
| Sorted Set | ランキング(スコア順の自動整列) |
「ゲームのランキング」「アクセス数カウンタ」のような、RDB で作ると重くなりがちな機能を数コマンドで実現できます。
代表的な使いどころ
- キャッシュ — DB の問い合わせ結果を Redis に置き、2回目以降は Redis から返す([[キャッシュ戦略]] の主役)
- セッションストア — ログイン状態などを複数の Web サーバーから共有する([[セッション管理]] のスケールアウトに必須)
- 簡易キュー / Pub/Sub — 軽量なジョブの受け渡し(本格的な用途は [[メッセージキュー]] 専用製品と使い分け)
永続化 — スナップショットとAOF
メモリ上のデータを失わないために、Redis は2つの永続化方式を持っています。ひとつは、一定間隔でメモリの内容全体を dump.rdb という1つのファイルへ書き出すスナップショット。ファイルが小さく再起動時の読み込みも速い一方、前回の取得以降に書き込まれた分は失われます。もうひとつは書き込みコマンドを都度追記していく AOF(Append Only File)で、失うデータを最大1秒程度に抑えられる代わりに、ファイルは肥大しやすくなります。
両方を有効にする構成も一般的ですが、そのとき再起動後の復元に使われるのは AOF だけです。最も欠けの少ないデータを持つのが AOF だからで、スナップショットは復旧の起点にはなりません。スナップショットの役目は、1ファイルで丸ごと持ち出せるバックアップと、AOF を使わない構成での高速な起動です。
初学者向けポイント
- メモリ上で動くため、サーバーが落ちるとデータが消えうるのが最大の注意点。スナップショット等の永続化機能はあるが、「消えても再生成できるデータ」を置くのが基本姿勢
- メインのデータベース(RDB: [[リレーショナルデータベース]])の置き換えではなく相棒 — 正本は RDB、速度が必要な部分に Redis、という組み合わせが定番
- 標準ポートは 6379番。redis-cli で対話的に試せる
関連技術とのつながり
- [[NoSQL]] — Redis はキーバリュー型 NoSQL の代表
- [[キャッシュ戦略]] — Redis の最も代表的な使いどころ
- [[セッション管理]] — 複数サーバーでのセッション共有先の定番
- [[メッセージキュー]] — 簡易キュー用途との使い分け先
Q: Redis が高速な主な理由はどれ?
- [x] データをメモリ上に置いて読み書きするから
- [ ] SQL を使わないから必ず速くなる
- [ ] データを自動的に圧縮するから
解説: Redis はメモリ上で動くため、ディスク中心のデータベースより桁違いに高速です。
Q: ランキング機能に向く Redis のデータ構造はどれ?
- [ ] String
- [ ] List
- [x] Sorted Set
解説: Sorted Set はスコア順に自動整列するため、ランキングを数コマンドで実現できます。
Q: Redis にデータを置くときの基本姿勢として本文で述べたのはどれ?
- [ ] すべての正本データを Redis だけに保存する
- [x] 消えても再生成できるデータを置く
- [ ] 一度置いたデータは削除しない
解説: メモリ上のデータは障害で消えうるため、正本は RDB に置き、Redis にはキャッシュ等の再生成可能なデータを置くのが基本です。