Memorizzazione in cache nelle funzioni Edge di AEM edge-functions-caching

IMPORTANT
Funzioni Edge di AEM è una funzione beta. Le funzioni e la documentazione potrebbero cambiare senza preavviso. Per partecipare al programma di accesso anticipato e fornire feedback, invia un'e-mail a aemcs-edgecompute-feedback@adobe.com.

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
Cosa memorizza in cache
Influenzato da
Come eliminare
Cache CDN
Risposta della funzione Edge al browser
Intestazioni di risposta impostate dalla funzione Edge (Cache-Control, Surrogate-Control, Surrogate-Key)
API eliminazione cache CDN
Cache di recupero funzione di Edge
Risposte di back-end alle chiamate fetch() all’interno della funzione Edge e dati memorizzati tramite l’API Core Cache
Intestazioni di risposta di back-end, CacheOverride per chiamate di recupero o chiavi sostitutive programmatiche tramite API cache di base
Comando CLI aio 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.

NOTE
L'intestazione 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:

  1. 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.
  2. 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-Key restituita 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 surrogateKeys durante 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
TIP
Scegliere convenzioni di denominazione delle chiavi alternative associate al modello di contenuto, ad esempio per percorso pagina (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);
CAUTION
La rimozione di tutto il contenuto memorizzato nella cache aumenta il traffico verso i backend. Utilizza il flag --all con attenzione e preferisci eliminazioni di chiavi sostitutive mirate, ove possibile.
recommendation-more-help
experience-manager-cloud-service-help-main-toc