Cache

Sistema di caching multi-strategia con TTL, background refresh e request deduplication. Strategie IndexedDB, LocalStorage, SessionStorage, Memory e NoCache con auto-fallback.

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

StorageCapacitaPersistenzaBest for
IndexedDBCacheStrategy~50MB+PermanenteDefault. Produzione, PWA, dataset grandi
LocalStorageCacheStrategy~5-10MBPermanenteFallback IndexedDB, dataset piccoli
SessionStorageCacheStrategy~5-10MBSolo sessione tabCache che si invalida al refresh tab
MemoryCacheStrategyRAM disponibileNessunaDevelopment, test, SSR
NoCacheStrategyDisabilita 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