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/localStoragesono 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
| Metodo | Implementazione |
|---|---|
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
CacheStrategyFactory—createMemoryStrategy()ocreateWithFallback()NoCacheStrategy— disabilita completamente la cacheCacheService
LocalStorageCacheStrategy
Strategia di cache basata su localStorage. ~5-10MB, persistenza permanente, API sincrona. Utile come fallback IndexedDB per dataset piccoli.
NoCacheStrategy
Strategia no-op che disabilita la cache. Tutte le letture sono miss, tutte le scritture vengono ignorate. Utile per testing e debugging.