Migration des Session-Stores: Redis → Postgres
Erstellt von Claude Code · 28.09.2026 · Review ausstehend
Hintergrund
Die Session-Daten liegen in einer einzelnen Redis-Instanz ohne Persistenz. Bei zwei Neustarts letzte Woche gingen jeweils rund 40.000 Anmeldungen verloren. Dieser Plan verlagert die Sessions in den bestehenden Postgres-Cluster und behält Redis als Lese-Cache.
Optionen
| Option | Persistenz | P95-Leselatenz | Aufwand |
|---|---|---|---|
| A: Redis-AOF aktivieren | Pro Sekunde | 0,8 ms | Gering |
| B: Wechsel zu Postgres | Pro Transaktion | 2,4 ms | Mittel |
| C: B + Redis-Lese-Cache | Pro Transaktion | 0,9 ms | Mittel |
Empfehlung: C – gleiche Persistenz wie B, Leselatenz fast wie heute.
Schritte
- Tabelle
sessionsmit Index aufuser_idanlegen - Dual-Write: Neue Sessions werden in Redis und Postgres geschrieben
- Backfill der bestehenden Sessions (rund 1,2 Millionen Zeilen)
- Lesezugriffe auf Postgres umstellen; Redis wird zum Cache
- 7 Tage beobachten, dann die Abhängigkeit von der Redis-Persistenz entfernen
Datenfluss
Backfill-Skript
-- Nur nicht abgelaufene Sessions übernehmen
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;
Risiken
Warnung
Kommt es während des Backfills zu Konflikten zwischen den Dual-Writes, hat Postgres Vorrang. Änderungen am Session-Schema vor Beginn des Backfills einfrieren.
Rollback
Die Lesezugriffe steuert das Flag SESSION_READ_FROM_PG. Ausschalten genügt, dann wird wieder aus Redis gelesen. Kein erneutes Deployment nötig.