Cache
Panoramica
Il modulo Cache di @pzeta/postgrest fornisce un sistema di caching avanzato per le risposte HTTP, basato su Strategy Pattern: ogni storage e incapsulato in una classe che implementa ICacheStrategy, interscambiabile a runtime.
Il CacheService (singleton) orchestra le funzionalita di alto livello:
- TTL configurabile per ogni entry
- Background refresh automatico quando i dati si avvicinano alla scadenza
- Request deduplication — richieste concorrenti per la stessa chiave condividono la stessa promise
- Auto cleanup periodico degli elementi scaduti (ogni 60s)
Strategie disponibili
| Storage | Capacita | Persistenza | Best for |
|---|---|---|---|
IndexedDBCacheStrategy | ~50MB+ | Permanente | Default. Produzione, PWA, dataset grandi |
LocalStorageCacheStrategy | ~5-10MB | Permanente | Fallback IndexedDB, dataset piccoli |
SessionStorageCacheStrategy | ~5-10MB | Solo sessione tab | Cache che si invalida al refresh tab |
MemoryCacheStrategy | RAM disponibile | Nessuna | Development, test, SSR |
NoCacheStrategy | — | — | Disabilita cache, debug |
CacheStrategyFactory.createWithFallback() seleziona automaticamente la strategy migliore disponibile: IndexedDB → SessionStorage → LocalStorage → Memory. E la scelta consigliata per produzione.Esempio rapido
import {
CacheService,
CacheStrategyFactory,
HttpClientFactory,
} from '@pzeta/postgrest'
const httpClient = HttpClientFactory.createFetchClient()
const strategy = CacheStrategyFactory.createWithFallback()
const cache = CacheService.getInstance(httpClient, strategy)
cache.init({
enabled: true,
threshold: 75, // refresh quando resta il 25% del TTL
maxAge: 3600000, // max 1 ora
})
const users = await cache.fetchWithCache<User[]>(
{ url: '/users', method: 'GET' },
'users-list',
300_000 // TTL 5 minuti
)
Sotto-pagine
CacheService
Servizio singleton di cache con TTL, background refresh, request deduplication e auto cleanup. Punto di ingresso primario al caching HTTP del package.
CacheStrategyFactory
Factory statica per la creazione di tutte le strategie di cache. Espone metodi specifici, create(type, config?) dinamico e createWithFallback() con auto-fallback IndexedDB → SessionStorage → LocalStorage → Memory.
IndexedDBCacheStrategy
Strategia di cache default basata su IndexedDB. Capacita elevata (~50MB+), persistente, async non-blocking. Ideale per produzione e dataset grandi.
IndexedDBStore
Wrapper low-level type-safe sopra IndexedDB con operazioni CRUD asincrone, transazioni gestite e supporto indici secondari. Usato internamente da IndexedDBCacheStrategy.
LocalStorageCacheStrategy
Strategia di cache basata su localStorage. ~5-10MB, persistenza permanente, API sincrona. Utile come fallback IndexedDB per dataset piccoli.
MemoryCacheStrategy
Strategia di cache in-memory via Map<string, CacheItem>. Velocissima, non persistente. Ideale per development, test e SSR.
NoCacheStrategy
Strategia no-op che disabilita la cache. Tutte le letture sono miss, tutte le scritture vengono ignorate. Utile per testing e debugging.
SessionStorageCacheStrategy
Strategia di cache basata su sessionStorage. ~5-10MB, persistente solo durante la sessione del tab. Isolata per tab del browser.
WebStorageCacheStrategy
Classe base astratta condivisa da LocalStorageCacheStrategy e SessionStorageCacheStrategy. Implementa la logica comune per Web Storage API con prefix, TTL e quota handling.
Vedi anche
PostgRESTClient— facade che integra cache + auth + HTTPFetchHttpClient— client HTTP usato per fetch e refreshCacheMetadata— value object con TTL/expiry