Armazenamento em cache nas funções do AEM Edge edge-functions-caching
Esta página fornece orientação técnica detalhada sobre como o armazenamento em cache funciona nas funções do AEM Edge, incluindo a arquitetura de dois caches, como controlar o comportamento do armazenamento em cache no seu código e como limpar entradas de cache quando o conteúdo é alterado.
Para obter uma visão geral sobre como funciona o armazenamento em cache do AEM as a Cloud Service, consulte Armazenamento em cache no AEM as a Cloud Service e O CDN no AEM as a Cloud Service. Para exemplos de código, consulte a Estrutura das funções do AEM Edge — Armazenamento em cache.
Arquitetura de armazenamento em cache architecture
As Funções do AEM Edge ficam entre a CDN e os serviços de back-end dos quais a função é obtida. Esses back-end podem ser instâncias de publicação do AEM, APIs de terceiros, bancos de dados externos ou qualquer terminal HTTP chamado pelo código. Há dois caches distintos no fluxo de solicitações, cada um operando independentemente:
Browser → AEM CDN (CDN Cache) → AEM Edge Functions (Fetch Cache) → Backend (AEM, APIs, etc.)
Cache-Control, Surrogate-Control, Surrogate-Key)fetch() dentro da Função Edge e dados armazenados por meio da API do Cache PrincipalCacheOverride em chamadas de busca ou chaves substitutas programáticas pela API do Cache Principalaio aem edge-functions purge-cache ou purgeSurrogateKey()Entender essa arquitetura de duas camadas é essencial porque cada cache tem um escopo diferente, controles diferentes e um mecanismo de limpeza diferente. O armazenamento em cache efetivo requer configuração deliberada em ambos os níveis.
Cache CDN (Externo) cdn-cache
O cache do CDN fica entre o navegador e a Função Edge. Armazena em cache a resposta da Função Edge. Você controla seu comportamento definindo cabeçalhos de cache HTTP padrão nas respostas do Edge Function:
return new Response(body, {
headers: {
'Surrogate-Key': 'page-home product-123',
'Cache-Control': 'public, max-age=3600'
}
});
Várias chaves substitutas são separadas por espaços. Essas chaves substitutas podem ser usadas para limpar o cache da CDN usando a API de Limpeza de Cache da CDN. O conceito de limpeza de chave substituta é o mesmo descrito em Limpar o cache para um grupo de recursos — a diferença principal é que as chaves substitutas da CDN aqui são definidas pelo seu código de Função do Edge, e não pelo back-end.
Cache de busca da função Edge (interno) fetch-cache
O cache de busca da função do Edge fica entre a função do Edge e os back-ends chamados por ela. Ele armazena em cache a resposta do back-end a fetch() chamadas feitas dentro do seu código de Função Edge. Ele também armazena quaisquer dados que seu código armazena através da API do Cache Principal ou da API do Cache Simples — interfaces de cache programáticas que lhe dão controle detalhado sobre o que é armazenado em cache, por quanto tempo e sob quais chaves substitutas.
não é influenciado por cabeçalhos que você define na resposta de saída da Função Edge — somente pelos cabeçalhos de resposta do back-end, por CacheOverride opções em suas chamadas de busca ou por chaves substitutas que você atribui programaticamente ao gravar na API do Cache Principal.
Surrogate-Key definido na resposta de saída da função de Edge para o navegador controla o cache externo da CDN, não este cache interno. As chaves substitutas para o cache interno vêm do cabeçalho de resposta Surrogate-Key do back-end ou de chaves que você atribui ao gravar na API do Cache Principal.Armazenamento em cache de respostas de back-end cache-override
Para armazenar em cache respostas de back-end por uma duração específica:
import { CacheOverride } from "fastly:cache-override";
const response = await fetch(request, {
backend: "my-origin",
cacheOverride: new CacheOverride({ ttl: 300 })
});
Ignorando o cache cache-pass
Para ignorar completamente o cache de busca e sempre buscar no back-end, use o modo pass:
import { CacheOverride } from "fastly:cache-override";
const response = await fetch(request, {
backend: "my-origin",
cacheOverride: new CacheOverride({ mode: "pass" })
});
Limpeza de cache cache-purging
Quando o conteúdo em cache se torna obsoleto, é necessário removê-lo explicitamente. Como os dois caches operam independentemente, é importante entender qual camada você está invalidando e como eles interagem.
Coordenando Expurgações em Ambas as Camadas coordinating-purges
Como a Função Edge fica atrás da CDN como um back-end (acessível por meio de seletores de origem), a limpeza de uma camada de cache sem a outra pode produzir resultados inesperados:
- Limpar somente o cache CDN faz com que a próxima solicitação chame a Função Edge. Se o cache de busca da Função Edge ainda mantiver dados obsoletos, ele retornará o conteúdo antigo, que o CDN armazena em cache novamente.
- Limpar apenas o cache da Função Edge limpa o estado interno, mas a CDN continua a fornecer sua cópia armazenada em cache anteriormente até que ela expire ou seja removida separadamente.
Prática recomendada: Quando os dados subjacentes forem alterados, limpe ambos caches — use a API de Limpeza de Cache CDN para a camada externa e purge-cache (ou purgeSurrogateKey()) para a camada interna da Função Edge. O uso de chaves substitutas consistentes em ambas as camadas simplifica a invalidação coordenada. Para obter um exemplo completo desse padrão, consulte o Modelo das Funções Edge do AEM — Remoção.
Remoção do cache da CDN purge-cdn-cache
Para limpar o cache externo da CDN (a resposta da Função Edge armazenada em cache na camada CDN), use a API de Limpeza de Cache da CDN. Esse é o mesmo mecanismo de limpeza usado para todo o conteúdo do AEM as a Cloud Service armazenado em cache na CDN — consulte Como limpar o cache do CDN para obter uma orientação passo a passo.
Na arquitetura do AEM as a Cloud Service, as Funções do Edge recebem tráfego da CDN via seletores de origem (consulte também Roteamento de CDN). O fluxo de solicitação completo é:
Client → AEM CDN (VCL) → Origin Selector → Edge Function → Backend
O CDN armazena em cache a resposta final retornada pela Função do Edge. Uma limpeza CDN limpa only essa resposta externa em cache, não tem efeito sobre os caches internos da Função Edge.
Remoção do cache de busca da função Edge purge-fetch-cache
O comando CLI purge-cache limpa o cache de busca de função do Edge (as respostas de back-end armazenadas em cache na função do Edge). Ele limpa não o cache externo da CDN. Para opções e sinalizadores completos da CLI, consulte a purge-cache referência do comando.
De Onde Vêm As Chaves Substitutas surrogate-key-origin
As chaves substitutas usadas em comandos de limpeza devem corresponder às chaves que estavam marcadas no conteúdo em cache no momento em que ele foi armazenado. Este é o mesmo conceito que limpeza baseada em chave substituta usado na CDN da AEM, mas aplicado ao cache interno da Função Edge. Essas chaves vêm de:
- O cabeçalho de resposta
Surrogate-Keyque o back-end retorna quando a Função Edge é buscada. - Chaves que você atribui programaticamente ao gravar na API do Cache Principal (por exemplo, por meio da opção
surrogateKeysao inserir uma entrada de cache).
Por exemplo, se o back-end responder com:
HTTP/1.1 200 OK
Content-Type: text/html
Surrogate-Key: page-about product-456 category-shoes
Cache-Control: public, max-age=3600
Então a resposta em cache é marcada com três chaves substitutas: page-about, product-456 e category-shoes. Posteriormente, você pode removê-la usando qualquer uma dessas chaves:
# 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 de conteúdo (product-456) ou tipo de conteúdo (category-shoes). Isso torna a invalidação do cache direcionado intuitiva quando o conteúdo é alterado.Limpar tudo purge-all
# Purge all cached content (use with caution)
aio aem edge-functions purge-cache <function-name> --all
Limpeza suave soft-purge
Use o sinalizador --soft para executar uma limpeza suave, que retém entradas obsoletas no cache e reduz a carga de back-end ao habilitar a revalidação obsoleta:
aio aem edge-functions purge-cache <function-name> --surrogateKey product-456 --soft
Limpeza programática programmatic-purge
Você também pode limpar chaves substitutas programaticamente de dentro do seu código Edge Function usando 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 com cuidado e prefira descartes de chave substituta direcionados quando possível.