Redisとは

目次

Redisとは?

Redis(レディス)は、データを主にメモリ上に保存する高速なキー・バリュー型のNoSQLデータベースです。

名前はRemote Dictionary Serverに由来します。アプリケーションの処理を速くするために、キャッシュやセッション管理などで使われます。

イメージは、よく使う情報をすぐに取り出せる、手元の作業机です。必要な情報を近くに置くことで、毎回大きな保管庫を探す手間を減らせます。

1. 基本の仕組み:キーと値で保存する

Redisは、データを「キー(名前)」と「値(データ)」の組み合わせで保存します。アプリケーションがキーを指定すると、対応する値を取得できます。

キー 値の例 意味
user:1001:name 田中 ユーザー1001の名前
user:1001:age 30 ユーザー1001の年齢
session:abc123 ログイン情報 セッションに対応する情報

キーに含めた : は、名前を整理するための区切りとして使っています。: を使うかどうかも、キーをどのような名前にするかも、開発者側で決められます。

Redisは主にメモリからデータを読み書きするため、短い応答時間を得やすいのが特徴です。有効期限(TTL)を付けて、一定時間後にデータを自動削除することもできます。

上の値は理解のための表記です。Redisの文字列型では「30」のような数値も文字列として保存でき、数値として増減する専用の操作もあります。

2. 主な利用例

用途 保存するもの・利用場面 得られる効果
キャッシュ 商品情報やデータベースの検索結果 応答を速くし、データベースの負荷を減らす
セッション管理 ログイン中のユーザー情報 複数のWebサーバーでログイン状態を共有する
ランキング ゲームの得点とユーザーID 上位一覧や順位を効率よく取得する
カウンター Webサイトのアクセス数 複数のアプリからの増分をまとめて管理する
アクセス回数の制限 一定時間内のAPI呼び出し回数 呼び出しが多すぎる利用者を制限する
キュー メール送信など、処理待ちのジョブやメッセージ 別のプログラムが後から処理する
一時的なロック ある処理を実行中であることを示す情報 複数サーバーによる同じ処理の同時実行を抑える

キューで使う場合は、失敗時の再実行や重複処理への対策も設計します。一時的なロックは、有効期限や障害時の動作を考慮する必要があります。

3. キャッシュとして使う流れ

毎回データベースを検索する代わりに、一度検索した結果をRedisに一時保存します。例えば、商品ページの表示で利用できます。

1回目:キャッシュなし

  1. データベースから取得
  2. アプリがRedisを確認する
  3. データがないため、データベースを検索する
  4. 取得した結果をRedisに保存する
  5. 利用者に結果を表示する

2回目以降:期限内・キャッシュあり

Redisから取得

  1. アプリがRedisを確認する
  2. 保存済みの結果を取得する
  3. 利用者に結果を表示する
  4. 同じ情報を取得するための、データベースへの問い合わせを省けます。

例:商品情報を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で柔軟に記述できる
代表的な用途 キャッシュ、セッション、一時データ 顧客・注文などの業務データ

実際の速度は、処理内容、データ量、ネットワーク、構成によって変わります。

代表的な構成:MySQLやPostgreSQLを業務データの主な保存先にし、Redisを組み合わせて処理を高速化します。

Redisを主なデータベースとして使う設計もありますが、保存するデータの重要性に合わせた永続性と復旧の設計が必要です。

6. 利用するときの注意点

障害・再起動でデータを失う可能性

メモリだけに保存したデータは、プロセス停止などで失われます。ディスクへの永続化を設定していても、方式や保存タイミングによって直近の更新が失われる可能性があります。

永続化の方法

RDBはある時点のデータをスナップショットとして保存し、AOF(※)は書き込み操作を記録します。用途に合わせて設定します。

※AOF(Append Only File)は、Redisで行ったデータの書き込み操作を、ディスク上のファイルに記録する仕組みです。

メモリ容量

保存するデータが増えるほどメモリが必要です。上限に達した場合、設定によってデータの追い出しや書き込みエラーが発生します。

用途ごとの保存方針

再取得できるキャッシュと、失うと困るセッション・処理待ちデータでは、同じデータ削除方針が適さないことがあります。

重要なデータの保護

永続化、バックアップ、レプリケーション、自動切り替え、復旧手順を検討します。クラスタ構成だけでデータ消失を防げるわけではありません。

まずは、Redisを「アプリケーションが素早く情報を取り出すための、高速なデータ置き場」と捉えるとわかりやすいです。一時保存の用途でよく使われ、設定によって永続化もできます。

関連の記事

PostgreSQL DDL文でtable,view等を作成する

△上に戻る