章: 第6章: パフォーマンスとインフラ
セッションをファイルに保存していて、複数サーバーに分散したときに困っていませんか?
ファイルベースのセッションは1台構成では動きますが、ロードバランサーで複数サーバーに分散すると「セッションが消える」問題が発生します。Redisをセッションストアに使うことで、高速で信頼性の高いセッション管理が実現できます。
ファイルベースセッションの問題点
サーバーAで作成したセッションはサーバーAのファイルに保存されるため、次のリクエストがサーバーBに届くとセッションが見つからずログアウトされます。Redisを共有セッションストアにすれば、どのサーバーからでも同じセッションを参照できます。
セッションストアの比較
| ストア | 速度 | 分散対応 | 永続化 | 向いている場面 |
| ファイル | 遅い | 非対応 | あり | シングルサーバー・開発環境 |
| DB(MySQL) | 中程度 | 対応 | あり | 永続化が必要・Redisなし |
| Redis | 高速 | 対応 | 任意 | 本番・マルチサーバー構成 |
| Memcached | 高速 | 対応 | なし | 揮発性でよい場合 |
チェックポイント: Redisをセッションストアに切り替える前に、
SESSION_DRIVER=redisとREDIS_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) を学びます。障害時の原因特定を速めるためのログ設計を整理しましょう。