データベース

Redis れでぃす

インメモリデータベースキャッシュキーバリューストアPub/Subセッション管理NoSQL
Redisについて教えて

簡単に言うとこんな感じ!

Redisは「超高速なメモ帳」みたいなデータベースだよ!普通のデータベースがHDDに書くのに対して、Redisはすべてメモリ(RAM)に保存するから、読み書きが桁違いに速いんだ。Webサイトの「よく使うデータ」を手元に置いておくキャッシュとして大活躍してるよ!


Redisとは

Redis(Remote Dictionary Server)は、データをコンピューターのメモリ上に保存する「インメモリデータベース」です。通常のデータベース(MySQLやPostgreSQLなど)がデータをディスクに書き込むのに対し、Redisはすべてをメモリ上で扱うため、1秒間に数十万〜数百万件という圧倒的な速度で読み書きできます。

単純な「キーとバリューのペア」を保存するだけでなく、リスト・セット・ハッシュ・ソート済みセットなど多彩なデータ型をサポートしているのが特徴です。Webアプリケーションのセッション管理・キャッシュ・リアルタイムランキング・メッセージキューなど幅広い用途で使われており、現代のWebシステムにおいてほぼ欠かせない存在になっています。

オープンソースで開発され、X(旧Twitter)・GitHub・Stackoverflowなど世界中の大規模サービスが採用しています。「速さが正義」な場面でまず名前が挙がるデータベースといえます。


Redisの主なデータ型と使いどころ

データ型概要代表的な使い方
Stringテキスト・数値・バイナリキャッシュ、カウンター、セッション保存
List順序付きの値のリストタイムライン、キュー(FIFO/LIFO)
Hashフィールドと値のマップユーザープロファイル、設定情報
Set重複なしの集合タグ管理、ユニークユーザー数
Sorted Setスコア付きの順序集合リアルタイムランキング、リーダーボード
Pub/Subメッセージの発行・購読チャット、通知、イベント配信
Streamログ形式の時系列データアクセスログ、センサーデータ

覚え方:「メモリに住む万能選手」

Redisの名前は Remote Dictionary Server の略。「辞書(Dictionary)」という言葉が示すように、「キー(言葉)でバリュー(意味)を引く」感覚で使えます。辞書は手元(メモリ)に置いてあるから引くのが速い、と覚えましょう!

データの永続化オプション

Redisはメモリで動くため、電源を切るとデータが消える懸念がありますが、2種類の永続化方式で対処できます。

方式仕組み特徴
RDBスナップショット一定間隔でメモリ内容をファイルに保存軽量・高速、直近データは失われる可能性あり
AOF(Append Only File)書き込み操作をすべてログに記録データ損失が少ない、ファイルサイズが大きくなりがち
RDB+AOF両方を組み合わせるバランスが良く本番環境で推奨

歴史と背景

  • 2009年 — Salvatore Sanfilippo(イタリアの開発者)がスタートアップのボトルネック解消のために開発・公開。「ディスクI/Oが遅すぎる」という実体験から生まれた
  • 2010年 — VMware社がSanfilippoをフルタイム雇用し、開発が本格化
  • 2013年 — Pivotal社(VMwareのスピンオフ)がスポンサーに
  • 2015年 — Redis Labsが設立され、商用サポートおよびクラウドサービス(Redis Cloud)を展開開始
  • 2018年 — Redis 5.0でStreamデータ型を追加。Kafkaのような用途にも対応
  • 2020年 — Redis 6.0でSSL/TLS対応・ACL(アクセス制御)が強化され、エンタープライズ利用が加速
  • 2022年 — Redis 7.0リリース。Redis Functionsなど高度な機能を追加
  • 2024年 — ライセンスをBSDからSSPL(Server Side Public License)へ変更し議論を呼ぶ。ValkeydなどのOSSフォークも誕生

他のデータベースとの比較

Redisがどんな場面で選ばれ、どんな場面では他を使うべきかを整理します。

データベース 用途マップ Redis インメモリ型 ⚡ キャッシュ 🔑 セッション管理 🏆 リアルタイムランキング 📨 メッセージキュー 🔢 カウンター 速度: ◎◎◎ 永続性: △ / 容量: 小〜中 MySQL / PostgreSQL RDB(リレーショナル型) 📊 トランザクション処理 🗂 複雑な検索・集計 💼 基幹システム 🔗 結合・JOIN操作 📋 マスターデータ管理 速度: ○ 永続性: ◎ / 容量: 大 MongoDB ドキュメント型 NoSQL 📄 柔軟なスキーマ 🌐 JSONライクなデータ 🚀 アジャイル開発 📦 コンテンツ管理 🗺 地理空間データ 速度: ◎ 永続性: ◎ / 容量: 大

RDBとRedisは「競合」ではなく「補完」

実際の現場では、MySQLやPostgreSQLなどのRDB(リレーショナルデータベース)をメインデータストアとして使い、Redisをキャッシュ層として前段に置くという組み合わせが定番です。「よく参照されるが変わらないデータ」をRedisに保存しておくことで、DBへの問い合わせを減らし全体のレスポンスを改善できます。

[ユーザー] → [Webサーバー] → [Redis(キャッシュ)]
                                    ↓ キャッシュミス時のみ
                              [MySQL(本体DB)]

Redisを選ぶべき判断基準

  • レスポンスが1ミリ秒以下を要求される場面(API・認証トークン管理など)
  • データが一時的で消えても再生成できる(セッション・キャッシュ)
  • ランキング・カウンターのように高頻度に更新されるデータ
  • 複数サーバー間でセッションを共有したい(スケールアウト時)

関連する規格・RFC

※ Redisはオープンソースプロジェクトであり、IETF RFCやISO規格として標準化されているものではありません。ただし、Redisへの接続に使われるプロトコルは以下の通り文書化されています。

仕様内容
RESP(Redis Serialization Protocol)RedisクライアントとサーバーがやりとりするためのシリアライズプロトコルRESP3は2020年に改訂

関連用語

  • キャッシュ — 頻繁に使うデータを高速な場所に一時保存する仕組み
  • NoSQL — 表形式にとらわれない柔軟なデータベースの総称
  • キーバリューストア — キーと値のペアでデータを管理する最もシンプルなNoSQL形式
  • セッション管理 — ログイン状態などユーザーの状態をサーバー側で保持する仕組み
  • Pub/Sub — 発行者と購読者を分離してメッセージを配信するパターン
  • メッセージキュー — システム間でメッセージを非同期に受け渡す仕組み
  • Memcached — Redisと並ぶ代表的なインメモリキャッシュシステム
  • クラスタリング — 複数のサーバーを束ねて可用性・性能を高める構成