Cache

MemoryCacheStrategy

Strategia di cache in-memory via Map<string, CacheItem>. Velocissima, non persistente. Ideale per development, test e SSR.

Cosa fa

MemoryCacheStrategy mantiene le entry in una Map<string, CacheItem> JavaScript. Tutte le operazioni sono praticamente istantanee (nessun I/O), ma i dati sono volatili — si perdono al refresh della pagina o al riavvio del processo Node.

Quando usarla

  • Development — feedback rapido senza state persistente tra reload
  • Testing — Jest/Vitest, ambiente isolato per ogni test
  • SSR / Node.js — cache per ciclo di vita della request o del worker
  • Ultimo fallback quando ne IndexedDB ne sessionStorage/localStorage sono disponibili (es. environment esotici, sandbox extension)
  • Dati altamente volatili dove la persistenza non porta valore
E l'ultimo livello di CacheStrategyFactory.createWithFallback(): se nessuno storage persistente e disponibile, MemoryCacheStrategy garantisce che il CacheService continui a funzionare (anche se senza persistenza).

Costruttore

class MemoryCacheStrategy implements ICacheStrategy {
  constructor()
}

Nessun parametro.

Esempio

import { MemoryCacheStrategy, CacheService } from '@pzeta/postgrest'

const strategy = new MemoryCacheStrategy()
const cache = CacheService.getInstance(httpClient, strategy)

// Test setup
beforeEach(() => {
  CacheService.resetInstance()
  CacheService.getInstance(httpClient, new MemoryCacheStrategy())
})

Comportamento

MetodoImplementazione
setItem(key, value, ttl?)Map.set(key, { data, timestamp, expiry })
getItem(key)Map.get(key), verifica scadenza, ritorna null se assente/scaduta
removeItem(key)Map.delete(key)
clear(prefix?)Map.clear() o filter+delete su prefix
cleanExpired()Itera e rimuove entry con expiry < now. Ritorna il count
supportsTTL()true
isPersistent()false

Le operazioni sono internamente sincrone ma esposte come Promise per rispettare il contratto di ICacheStrategy.

Considerazioni memoria

Senza un meccanismo di scadenza/limite, la Map puo crescere indefinitamente. Il CacheService avvia auto cleanup ogni 60s (se supportsTTL() === true), ma e responsabilita dell'app impostare un ttl ragionevole su fetchWithCache e chiamare invalidateAll() quando opportuno (es. al logout, gia fatto da AuthService).

Vedi anche