Migrazione del session store: Redis → Postgres
Generato da Claude Code · 28/09/2026 · In attesa di revisione
Contesto
I dati di sessione risiedono in una singola istanza Redis con la persistenza disattivata. La settimana scorsa due riavvii hanno fatto perdere circa 40.000 login ciascuno. Questo piano sposta le sessioni sul cluster Postgres esistente e mantiene Redis come cache di lettura.
Opzioni
| Opzione | Persistenza | P95 lettura | Impegno |
|---|---|---|---|
| A: Attivare Redis AOF | Ogni secondo | 0,8 ms | Basso |
| B: Passare a Postgres | Per transazione | 2,4 ms | Medio |
| C: B + cache di lettura Redis | Per transazione | 0,9 ms | Medio |
Consigliata l’opzione C: stessa persistenza di B, con una latenza di lettura vicina a quella attuale.
Passaggi
- Creare la tabella
sessionscon un indice suuser_id - Doppia scrittura: le nuove sessioni vanno sia su Redis sia su Postgres
- Backfill delle sessioni esistenti (circa 1,2 milioni di righe)
- Spostare le letture su Postgres; Redis diventa una cache
- Monitorare per 7 giorni, poi eliminare la dipendenza dalla persistenza di Redis
Flusso dei dati
Script di backfill
-- Backfill solo delle sessioni non scadute
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;
Rischi
Avvertenza
Se durante il backfill le doppie scritture vanno in conflitto, prevale Postgres. Congelare le modifiche allo schema delle sessioni prima di avviare il backfill.
Rollback
Le letture sono controllate dal flag SESSION_READ_FROM_PG. Disattivandolo si torna a Redis, senza un nuovo deploy.