第48回: Redisを使ったセッション管理 — セッションを「インメモリDB」で高速・安定化する

章: 第6章: パフォーマンスとインフラ

セッションをファイルに保存していて、複数サーバーに分散したときに困っていませんか?

ファイルベースのセッションは1台構成では動きますが、ロードバランサーで複数サーバーに分散すると「セッションが消える」問題が発生します。Redisをセッションストアに使うことで、高速で信頼性の高いセッション管理が実現できます。

ファイルベースセッションの問題点

サーバーAで作成したセッションはサーバーAのファイルに保存されるため、次のリクエストがサーバーBに届くとセッションが見つからずログアウトされます。Redisを共有セッションストアにすれば、どのサーバーからでも同じセッションを参照できます。

セッションストアの比較

ストア 速度 分散対応 永続化 向いている場面
ファイル 遅い 非対応 あり シングルサーバー・開発環境
DB(MySQL) 中程度 対応 あり 永続化が必要・Redisなし
Redis 高速 対応 任意 本番・マルチサーバー構成
Memcached 高速 対応 なし 揮発性でよい場合

チェックポイント: Redisをセッションストアに切り替える前に、SESSION_DRIVER=redisREDIS_HOST が正しく設定されているか確認しましょう。Laravelでは predis/predis または PhpRedis拡張が必要です。切り替え後は既存セッションが無効化されるため、ユーザーの再ログインが発生することを考慮してください。

コードサンプル


# .env 設定
# SESSION_DRIVER=redis
# REDIS_HOST=127.0.0.1
# REDIS_PORT=6379
# CACHE_STORE=redis

<?php
// Laravelでのキャッシュ操作
Cache::put('user:1', $user, now()->addMinutes(30));
$user = Cache::get('user:1');
Cache::forget('user:1');

まとめ & 次のステップ

  • Redisをセッションストアにすることで、マルチサーバー環境でもセッションを安定共有できます
  • SESSION_DRIVER=redis に変更するだけでLaravelは自動的にRedisを使います
  • セッションの有効期限(SESSION_LIFETIME)はセキュリティ要件に合わせて設定しましょう
  • Redisはキャッシュとセッションを兼用できますが、キー名のプレフィックスで用途を分けましょう
  • Redis自体の可用性も設計に含め、フォールバック戦略を検討してください

次回は ログ設計(Monolog) を学びます。障害時の原因特定を速めるためのログ設計を整理しましょう。

Related Articles