セッションストアの移行:Redis → Postgres
Claude Codeが生成 · 2026-09-28 · レビュー待ち
背景
セッションデータは、永続化を無効にした単一のRedisインスタンスに保存されています。先週の2回の再起動では、そのたびに約4万件のログインが失われました。この計画では、セッションを既存のPostgresクラスタに移し、Redisは読み取りキャッシュとして残します。
案の比較
| 案 | 耐久性 | 読み取りP95 | 工数 |
|---|---|---|---|
| A:Redis AOFを有効化 | 秒単位 | 0.8 ms | 小 |
| B:Postgresに移行 | トランザクション単位 | 2.4 ms | 中 |
| C:B + Redis読み取りキャッシュ | トランザクション単位 | 0.9 ms | 中 |
Cを推奨します。耐久性はBと同じで、読み取りレイテンシは現状に近い水準です。
手順
sessionsテーブルを作成し、user_idにインデックスを追加- 二重書き込み:新規セッションをRedisとPostgresの両方に書き込み
- 既存セッションをバックフィル(約120万行)
- 読み取りをPostgresに切り替え、Redisはキャッシュとして運用
- 7日間監視し、その後Redisの永続化への依存を解消
データフロー
バックフィルスクリプト
-- 有効期限内のセッションのみバックフィル
INSERT INTO sessions (id, user_id, data, expires_at)
SELECT id, user_id, data, expires_at
FROM staging_sessions
WHERE expires_at > now()
ON CONFLICT (id) DO NOTHING;
リスク
警告WARNING
バックフィル中に二重書き込みが競合した場合は、Postgresを優先します。バックフィルを始める前に、セッションスキーマの変更を凍結してください。
ロールバック
読み取り先はSESSION_READ_FROM_PGフラグで制御します。オフにするとRedisに戻ります。再デプロイは不要です。