Memorizzazione in cache nelle funzioni Edge di AEM edge-functions-caching
Questa pagina fornisce indicazioni tecniche dettagliate su come funziona il caching all’interno delle funzioni di AEM Edge, inclusa l’architettura a due cache, come controllare il comportamento del caching nel codice e come eliminare le voci della cache quando il contenuto cambia.
Per informazioni generali sul funzionamento del caching di AEM as a Cloud Service, vedi Memorizzazione in cache in AEM as a Cloud Service e La rete CDN in AEM as a Cloud Service. Per esempi di codice, fare riferimento a AEM Edge Functions Boilerplate — Caching.
Architettura della memorizzazione in cache architecture
Le funzioni Edge di AEM si trovano tra la rete CDN e i servizi di back-end da cui la funzione recupera. Questi back-end possono essere istanze di pubblicazione di AEM, API di terze parti, database esterni o qualsiasi endpoint HTTP chiamato dal codice. Nel flusso di richieste sono presenti due cache distinte, ognuna delle quali opera in modo indipendente:
Browser → AEM CDN (CDN Cache) → AEM Edge Functions (Fetch Cache) → Backend (AEM, APIs, etc.)
Cache-Control, Surrogate-Control, Surrogate-Key)fetch() all’interno della funzione Edge e dati memorizzati tramite l’API Core CacheCacheOverride per chiamate di recupero o chiavi sostitutive programmatiche tramite API cache di baseaio aem edge-functions purge-cache o purgeSurrogateKey()Comprendere questa architettura a due livelli è essenziale perché ogni cache ha un ambito diverso, controlli diversi e un meccanismo di eliminazione diverso. Un caching efficace richiede una configurazione intenzionale a entrambi i livelli.
Cache CDN (esterna) cdn-cache
La cache CDN è situata tra il browser e la funzione Edge. Memorizza nella cache la risposta della funzione Edge. Puoi controllarne il comportamento impostando intestazioni cache HTTP standard sulle risposte della funzione Edge:
return new Response(body, {
headers: {
'Surrogate-Key': 'page-home product-123',
'Cache-Control': 'public, max-age=3600'
}
});
Più chiavi sostitutive sono separate da spazi. Queste chiavi alternative possono essere utilizzate per eliminare la cache CDN utilizzando l’API di eliminazione cache CDN. Il concetto di eliminazione della chiave sostitutiva è lo stesso descritto in Eliminare la cache per un gruppo di risorse. La differenza chiave è che le chiavi sostitutive CDN sono impostate dal codice della funzione Edge anziché dal backend.
Cache di recupero funzione di Edge (interno) fetch-cache
La cache di recupero della funzione Edge si trova tra la funzione Edge e i backend chiamati. Memorizza nella cache la risposta del backend a fetch() chiamate effettuate all’interno del codice della funzione Edge. Contiene inoltre tutti i dati memorizzati dal codice tramite l’API cache core o l’API cache semplice, interfacce di memorizzazione nella cache a livello di programmazione che consentono di controllare in modo dettagliato ciò che viene memorizzato nella cache, per quanto tempo e sotto quali chiavi alternative.
È not influenzato dalle intestazioni impostate nella risposta in uscita della funzione Edge, solo dalle intestazioni di risposta del backend, dalle opzioni CacheOverride nelle chiamate di recupero o dalle chiavi sostitutive assegnate a livello di programmazione durante la scrittura nell’API della cache di base.
Surrogate-Key impostata nella risposta in uscita della funzione Edge al browser controlla la cache CDN esterna, non la cache interna. Le chiavi sostitutive per la cache interna provengono dall'intestazione di risposta Surrogate-Key del backend o dalle chiavi assegnate durante la scrittura nell'API della cache di base.Memorizzazione nella cache delle risposte di back-end cache-override
Per memorizzare nella cache le risposte back-end per una durata specifica:
import { CacheOverride } from "fastly:cache-override";
const response = await fetch(request, {
backend: "my-origin",
cacheOverride: new CacheOverride({ ttl: 300 })
});
Ignorare la cache cache-pass
Per ignorare completamente la cache di recupero e recuperare sempre dal backend, utilizzare la modalità pass:
import { CacheOverride } from "fastly:cache-override";
const response = await fetch(request, {
backend: "my-origin",
cacheOverride: new CacheOverride({ mode: "pass" })
});
Rimozione cache cache-purging
Quando il contenuto memorizzato in cache diventa obsoleto, devi eliminarlo esplicitamente. Poiché le due cache operano in modo indipendente, è importante comprendere quale livello stai invalidando e come interagiscono.
Coordinamento delle puliture tra entrambi i livelli coordinating-purges
Poiché la funzione Edge si trova dietro la rete CDN come back-end (raggiungibile tramite selettori origine), la rimozione di un livello di cache senza l’altro può produrre risultati imprevisti:
- Se si rimuove solo la cache CDN, la richiesta successiva richiamerà la funzione Edge. Se la cache di recupero della funzione Edge contiene ancora dati non aggiornati, restituisce contenuto obsoleto, che la rete CDN memorizzerà nuovamente in cache.
- Se si rimuove solo la cache della funzione Edge, lo stato interno verrà cancellato, ma la rete CDN continuerà a servire la copia precedentemente memorizzata nella cache fino alla scadenza o all’eliminazione separata.
Best practice: quando i dati sottostanti cambiano, elimina entrambe le cache. Utilizza l’API di eliminazione della cache CDN per il livello esterno e purge-cache (o purgeSurrogateKey()) per il livello delle funzioni Edge interno. L’utilizzo di chiavi sostitutive coerenti su entrambi i livelli semplifica l’invalidazione coordinata. Per un esempio completo di questo pattern, vedere la Boilerplate delle funzioni Edge di AEM — Rimozione.
Rimozione della cache CDN purge-cdn-cache
Per eliminare la cache CDN esterna (la risposta della funzione Edge memorizzata nella cache a livello di CDN), utilizzare l’API di eliminazione cache CDN. Questo è lo stesso meccanismo di eliminazione utilizzato per tutto il contenuto AEM as a Cloud Service memorizzato nella cache CDN. Per istruzioni dettagliate, consulta Come eliminare la cache CDN.
Nell’architettura di AEM as a Cloud Service, le funzioni Edge ricevono traffico dalla rete CDN tramite selettori origine (vedi anche Indirizzamento rete CDN). Il flusso completo delle richieste è:
Client → AEM CDN (VCL) → Origin Selector → Edge Function → Backend
La CDN memorizza nella cache la risposta finale restituita dalla funzione Edge. Un’eliminazione CDN cancella only tale risposta esterna memorizzata nella cache, senza alcun effetto sulle cache interne della funzione Edge.
Rimozione della cache di recupero della funzione di Edge purge-fetch-cache
Il comando CLI purge-cache elimina la cache di recupero della funzione Edge (le risposte di backend memorizzate nella cache della funzione Edge). not elimina la cache CDN esterna. Per le opzioni e i flag CLI completi, vedere il riferimento al comando purge-cache.
Da dove provengono le chiavi alternative surrogate-key-origin
Le chiavi sostitutive utilizzate nei comandi di eliminazione devono corrispondere alle chiavi con tag nel contenuto memorizzato nella cache al momento dell’archiviazione. È lo stesso concetto di eliminazione basata su chiave sostitutiva utilizzato nella rete CDN di AEM, ma applicato alla cache interna della funzione Edge. Queste chiavi provengono da:
- Intestazione di risposta
Surrogate-Keyrestituita dal backend quando la funzione Edge viene recuperata da essa. - Tasti assegnati a livello di programmazione durante la scrittura nell’API Core Cache (ad esempio tramite l’opzione
surrogateKeysdurante l’inserimento di una voce nella cache).
Ad esempio, se il backend risponde con:
HTTP/1.1 200 OK
Content-Type: text/html
Surrogate-Key: page-about product-456 category-shoes
Cache-Control: public, max-age=3600
La risposta memorizzata nella cache viene quindi contrassegnata con tre chiavi alternative: page-about, product-456 e category-shoes. In seguito, puoi eliminarlo utilizzando uno dei seguenti tasti:
# Purge all cached content tagged with "product-456"
aio aem edge-functions purge-cache <function-name> --surrogateKey product-456
# Purge multiple keys at once
aio aem edge-functions purge-cache <function-name> -k page-about -k category-shoes
page-about), ID contenuto (product-456) o tipo di contenuto (category-shoes). Questo rende intuitivo l’annullamento della validità della cache di destinazione quando il contenuto cambia.Rimuovi tutto purge-all
# Purge all cached content (use with caution)
aio aem edge-functions purge-cache <function-name> --all
Eliminazione temporanea soft-purge
Utilizza il flag --soft per eseguire una rimozione temporanea, che mantiene le voci non aggiornate nella cache e riduce il carico di back-end consentendo la riconvalida non aggiornata:
aio aem edge-functions purge-cache <function-name> --surrogateKey product-456 --soft
Eliminazione programmatica programmatic-purge
Puoi anche eliminare le chiavi sostitutive a livello di programmazione dall’interno del codice della funzione Edge utilizzando purgeSurrogateKey:
import { purgeSurrogateKey } from "fastly:compute";
// Hard purge (immediate removal)
purgeSurrogateKey("product-456");
// Soft purge (retain stale entries for revalidation)
purgeSurrogateKey("product-456", true);
--all con attenzione e preferisci eliminazioni di chiavi sostitutive mirate, ove possibile.