Memoria veloce davanti al database
Redis e un archivio dati in memoria usato soprattutto come cache: tiene a portata di mano i dati piu richiesti, evitando query ripetute a database piu lenti. La sfida non e usarlo, ma farlo senza introdurre incoerenze tra cache e fonte dei dati.
Cache-aside
Il pattern piu diffuso e cache-aside: l'applicazione interroga prima Redis e, solo in caso di miss, legge dal database e popola la cache. E semplice e mette la cache fuori dal percorso di scrittura.
async function getUtente(id) {
const chiave = `utente:${id}`;
const cached = await redis.get(chiave);
if (cached) return JSON.parse(cached);
const utente = await db.query("SELECT * FROM utenti WHERE id = $1", [id]);
await redis.set(chiave, JSON.stringify(utente), "EX", 3600);
return utente;
}
Write-through e invalidazione
Con il write-through si aggiorna la cache contestualmente al database, mantenendola sempre fresca al costo di scritture piu lente. In alternativa, dopo ogni scrittura si invalida la chiave, costringendo la lettura successiva a ripopolarla.
La scadenza e tutto
Impostare un TTL (EX) su ogni chiave e la difesa piu efficace contro i dati obsoleti: anche se un'invalidazione sfugge, la voce scade comunque. La durata va calibrata sul compromesso tra freschezza e numero di accessi al database.
In MUSTNODE SRL usiamo Redis con strategie di caching scelte in base al pattern di accesso dei dati, accelerando le applicazioni senza sacrificare la coerenza delle informazioni.
Articoli correlati
Altri approfondimenti dalla categoria Backend & Java.
Node.js Streams per gestire grandi volumi di dati
Come usare gli stream di Node.js per elaborare file e flussi di dati di grandi dimensioni senza saturare la memoria.
Java moderno: record, sealed e pattern matching
Le novita del Java recente che rendono il codice piu conciso ed espressivo: record, classi sealed e pattern matching su switch.
Costruire API REST con Spring Boot
Dai controller alla validazione, dalla gestione degli errori alla documentazione: come strutturiamo API REST solide con Spring Boot.