renue

ARTICLE

Redisとは?キャッシュDBの仕組み・使い方・活用事例を解説

公開日: 2026/4/3

Redisのデータ構造・仕組みからキャッシュ・セッション管理・AI/ML活用まで解説。導入手順と設定ポイントも紹介。

Redisとは?基本概念と特徴

Redis(Remote Dictionary Server)とは、インメモリ型のキー・バリュー型データストアです。データをディスクではなくメモリ(RAM)上に保持するため、マイクロ秒単位の超高速アクセスを実現します。オープンソースとして公開されており、キャッシュ・セッション管理・リアルタイム処理など幅広い用途で採用されています。

2009年にSalvatore Sanfilippo氏が開発を開始し、現在はRedis Ltd.が主要なスポンサーとなっています。安定バージョンはRedis 7系であり、AIアプリケーション向けのベクトル検索機能(Redis Stack)も提供されています。

Redisの主な特徴

  • 超高速処理:インメモリ方式により、通常のRDBMSが数十ミリ秒かかる処理をサブミリ秒で処理
  • 多様なデータ構造:単純な文字列からリスト・集合・ソート済み集合・ハッシュまで対応
  • シングルスレッド処理:ロック競合なしで高いスループットを実現
  • 永続化対応:RDB(スナップショット)とAOF(追記ログ)により、メモリの揮発性リスクを低減
  • Pub/Subとストリーム:リアルタイムのメッセージブローカーとしても機能
  • クラスタリング:水平スケールアウトによる大規模運用が可能

AIシステム構築・インフラ設計|Renueへ相談

Redis・クラウドインフラを活用したAIシステムの設計・構築をサポートします。

無料相談する

RDBMSとRedisの違い

従来のリレーショナルデータベース(MySQL・PostgreSQLなど)とRedisは、目的・設計思想・得意な処理が大きく異なります。

項目RDBMS(MySQL等)Redis
データ保存場所ディスク(永続)メモリ(オプションで永続化可)
アクセス速度数〜数十ミリ秒0.1ミリ秒以下(サブミリ秒)
データモデルテーブル・行・列(SQL)キー・バリュー(多様な型)
ACID特性完全対応部分対応(トランザクションあり)
主な用途永続データ管理・複雑クエリキャッシュ・リアルタイム処理
TTL(有効期限)原則なしキー単位で設定可能

両者は競合するものではなく、RDBMSをデータの永続ストアとして使いながら、Redisをキャッシュ層として前段に置くという組み合わせが現代のWebシステムでは標準的な構成です。

Redisのデータ構造の種類

Redisが他のKVSと一線を画す最大の特徴が、豊富なデータ型のサポートです。

1. String(文字列)

最も基本的な型。テキスト・数値・バイナリデータを格納できます。カウンター(INCR/DECR)やシンプルなキャッシュに利用します。

SET user:1:name "Yamada Taro"
GET user:1:name
SET page:views 0
INCR page:views

2. Hash(ハッシュ)

フィールドと値のペアを格納。ユーザープロフィールや商品情報などオブジェクト構造の保存に最適です。

HSET user:1 name "Yamada" age 30 email "yamada@example.com"
HGET user:1 name
HGETALL user:1

3. List(リスト)

挿入順を保持するリスト。ジョブキューやタイムライン表示、最新N件の履歴管理に使われます。

LPUSH task:queue "task1"
RPUSH task:queue "task2"
LRANGE task:queue 0 -1
RPOP task:queue

4. Set(集合)

重複なしの順不同コレクション。フォロワーリストやタグ管理、ユニークユーザー集計に活用されます。

SADD tags:article1 "redis" "cache" "database"
SMEMBERS tags:article1

5. Sorted Set / ZSet(ソート済み集合)

各要素にスコアを付与し自動ソートされる集合。リアルタイムランキングやスコアボードに最適です。

ZADD ranking 2300 "userB"
ZADD ranking 1800 "userC"
ZREVRANGE ranking 0 2 WITHSCORES

6. Stream(ストリーム)

時系列データやイベントログの永続的なストリーム処理に対応。Kafka的なメッセージングをRedis単体で実現できます。

Redisの主な使い方・活用ユースケース

1. キャッシュ(Cache)

Redisの最も代表的な用途です。データベースへの問い合わせ結果を一定時間Redisに保持することで、バックエンドDBの負荷を削減し、レスポンスタイムを短縮します。

  • 商品情報・価格・在庫のキャッシュ(ECサイト)
  • 記事・ブログ本文のキャッシュ(CMS)
  • 外部API呼び出し結果のキャッシュ(BigQuery・Google検索等)
  • DBの設定値・マスタデータのキャッシュ
import redis, json
r = redis.Redis(host="localhost", port=6379, db=0)

def get_product(product_id):
    cache_key = f"product:{product_id}"
    cached = r.get(cache_key)
    if cached:
        return json.loads(cached)
    product = db.query(product_id)
    r.setex(cache_key, 3600, json.dumps(product))
    return product

2. セッション管理(Session Store)

ユーザーのログイン状態やショッピングカートをRedisに保存する用途です。複数サーバーに分散したWebアプリでも、共有セッションストアとしてRedisを使うことでセッション引き継ぎを実現できます。AIシステムでは会話状態(メッセージ履歴・タスクキュー)をTTL付きでRedisに保持し、DBへの書き込み頻度を抑える二層構成が一般的です。

3. タスクキュー・ジョブキュー(Task Queue)

CeleryやBullMQといった非同期タスクキューはRedisをバックエンドとして動作します。時間のかかるAI処理・動画処理・メール送信などを非同期化する際に必須の構成です。

  • Python + Celery + Redis:FastAPIバックエンドでの非同期処理の定番構成
  • Node.js + BullMQ + Redis:Next.js / Express系でよく使われる構成

4. Pub/Sub・リアルタイム配信

RedisのPub/Sub機能を使うと、複数のクライアントへのリアルタイムイベント配信が可能です。AIエージェントの処理結果をServer-Sent Events(SSE)でブラウザへストリーミング配信する際、Celeryワーカー → Redis Pub/Sub → FastAPI → ブラウザという経路が実装されることが多いです。

5. レート制限(Rate Limiting)

APIへの過剰なリクエストをRedisのカウンター機能で制御します。INCR + EXPIREの組み合わせで「1分間に100リクエストまで」といった制限を原子的に実装できます。

6. リーダーボード・ランキング

Sorted Setを使うと、リアルタイムのスコアランキングを非常に効率的に管理できます。ゲームのスコアボードやSNSのホットトピック表示に活用されます。

AI・ML分野でのRedis活用

AI・機械学習システムとRedisの組み合わせは近年急速に広まっています。

1. LLMエージェントの会話状態管理

ChatGPTやClaudeなどのLLMを使ったチャットアプリでは、会話履歴・セッション状態を一時的に保持するストレージとしてRedisが活用されます。TTLを設定することでメモリを効率的に管理しつつ、DBへの全会話保存と組み合わせた二層構成が一般的です。

2. 非同期AI処理のキュー管理

動画処理・文書要約・画像生成といった重い処理はCelery/BullMQキューに積み、Redisがその仲介役を担います。処理の状態管理(pending / running / done)もRedisのハッシュで管理するケースが多くあります。

3. Vector Search(ベクトル検索)

Redis Stack / Redis Cloudでは、ベクトルの格納・類似度検索(ANN: Approximate Nearest Neighbor)が可能です。RAG(Retrieval-Augmented Generation)システムにおけるベクトルDBとして利用するケースが増えています。

4. AIモデルの推論結果キャッシュ

同一プロンプト・同一入力に対するLLMのAPI呼び出しをRedisでキャッシュすることで、API費用とレイテンシを大幅に削減できます。特にBigQueryや外部APIを多用するSEOツール・リサーチツールでは費用対効果が非常に高い手法です。

5. Feature Store(特徴量ストア)

機械学習モデルへの入力特徴量をリアルタイムで配信するFeature Storeとして、Redisが使われることがあります。Feast等のFeature StoreフレームワークはオンラインストアとしてRedisを標準サポートしています。

Redisの導入手順・設定ポイント

方法1:Dockerで起動(推奨)

docker run -d --name redis -p 6379:6379 redis:7-alpine
docker exec -it redis redis-cli ping

方法2:Docker Composeで定義(本番推奨)

services:
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
volumes:
  redis_data:

主要な設定ポイント(redis.conf)

maxmemory 256mb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
save 900 1
save 300 10
save 60 10000
requirepass your_strong_password

Pythonからの接続(redis-py)

import redis
pool = redis.ConnectionPool(host="localhost", port=6379, db=0, max_connections=20)
r = redis.Redis(connection_pool=pool)
r.set("key", "value", ex=3600)
value = r.get("key")

Celeryのブローカーとして設定(Python)

from celery import Celery
app = Celery(
    "tasks",
    broker="redis://localhost:6379/0",
    backend="redis://localhost:6379/1",
)

クラウドサービスの利用

  • Azure Cache for Redis:Azureユーザー向けマネージドサービス
  • Amazon ElastiCache(Redis):AWSユーザー向け。BullMQとの相性が良い
  • Redis Cloud:Redis公式のマネージドサービス。Vector Search機能も含む
  • Google Cloud Memorystore:GCPユーザー向けマネージドRedis

本番運用での注意点

  • キーの名前空間を分離する:Celery・OAuth・キャッシュ用途でDBインデックス(db0, db1, db2…)を分けてキーの衝突を防ぐ
  • 段階的な有効化:新機能のキャッシュは環境変数フラグを使い、Redisのメモリポリシーとheadroomを確認してから有効化する
  • ペイロードサイズの上限設定:大きなデータはキャッシュしないルールを設けてメモリを保護する
  • Redisダウン時のフォールバック:Redisへのアクセス失敗時はDBを直接参照するフォールバック処理を必ず実装する
  • 鮮度が重要なデータはキャッシュしない:ニュース・市況・緊急停止フラグ等はTTLを短くするかキャッシュ対象外にする

よくある質問(FAQ)

Q1. Redisはデータベースですか?キャッシュですか?

RedisはNoSQLデータベースの一種ですが、主にキャッシュ・セッション管理・メッセージブローカーとして使われます。永続化設定(AOF/RDB)を有効にすることでプライマリDBとして使うことも可能ですが、多くのシステムではRDBMS(MySQL等)と組み合わせて使うのが一般的です。

Q2. RedisとMemcachedの違いは何ですか?

両者ともインメモリKVSですが、Memcachedは文字列のみ対応・永続化なし・シンプルさが特徴です。一方RedisはList・Hash・Sorted Setなど多様なデータ型に対応し、永続化・Pub/Sub・Luaスクリプトなども利用できます。現在はほとんどのケースでRedisが選択されます。

Q3. Redisはメモリが不足したらどうなりますか?

maxmemoryとmaxmemory-policyの設定によって動作が変わります。キャッシュ用途では「allkeys-lru」(最近最も使われていないキーを自動削除)が推奨です。maxmemoryを設定しない場合、システムのメモリを使い切ってOOMエラーになる可能性があるため必ず設定してください。

Q4. RedisをAIシステムに導入するメリットは?

LLMのAPI呼び出しコスト削減・レスポンス高速化・非同期処理キューの管理・会話状態の高速な読み書きなど、多くのメリットがあります。特に同一クエリへのLLM呼び出しをキャッシュすることで、APIコストを大幅に抑えられます。

Q5. AzureやAWSでRedisを使う場合、セルフホストとマネージドサービスどちらが良い?

本番環境ではマネージドサービス(Azure Cache for Redis / Amazon ElastiCache)の利用を推奨します。パッチ適用・フェイルオーバー・モニタリングが自動化され、運用コストを大幅に削減できます。開発・検証環境ではDockerでのセルフホストが手軽です。

Q6. RedisでLuaスクリプトは使えますか?

はい。Redisは組み込みのLuaインタープリタをサポートしており、複数のコマンドを原子的に実行するスクリプトを記述できます。レート制限・複雑なキャッシュ無効化ロジックなどに活用されます。

Q7. Redis Clusterとは何ですか?

Redis Clusterは複数のRedisノードにデータを水平分散するシャーディング機能です。単一ノードのメモリ容量・スループット限界を超えた大規模システムで使われます。クラスタ構成では最低3つのマスターノードが必要です。

AIシステム構築・インフラ設計|Renueへ相談

Redis・クラウドインフラを活用したAIシステムの設計・構築をサポートします。

無料相談する