# Real-Time Purge

O **Real-Time Purge** permite que você exclua instantaneamente o cache de seu conteúdo na Azion. Ao atualizar o conteúdo em sua origem, você deve escolher a melhor estratégia para atualizá-lo no cache da Azion.

Ao configurar suas políticas de cache, você determina o tempo que deseja que seus objetos fiquem em cache na Azion. Quando você atualiza seu conteúdo na origem, a Azion pode continuar fornecendo uma cópia em cache pelo tempo que você definiu para ser armazenado em cache. Com o Real-Time Purge, você pode excluir instantaneamente o cache de seu conteúdo na Azion, tanto do **Cache** quanto do **Tiered Cache**. Dessa forma, a Azion buscará a última versão de seu conteúdo direto na origem.

Porém, se objetos específicos armazenados em cache precisarem ser removidos do edge antes de expirarem, você tem a opção de limpar o cache com o Real-Time Purge. A limpeza regular do cache ajuda você a:

- Garantir que os usuários recebam o conteúdo mais atualizado e experimentem as alterações mais recentes na sua aplicação.
- Evitar que os usuários visualizem conteúdo obsoleto.
- Fornecer conteúdo compatível com navegadores e dispositivos modernos.
- Fornecer respostas de API e cache de conteúdo dinâmico sem sacrificar a experiência do usuário.
- Controlar como seus objetos são servidos pela Azion.
- Gerenciar objetos obsoletos ou desatualizados, ajudando seus desenvolvedores a criar soluções confiáveis, resilientes e de melhor desempenho.

---

## Boas práticas

Para garantir que os purges de cache sejam seguros e controlados, você deve manter o versionamento nos nomes de objetos. Ao atualizar o objeto em sua origem, você pode adicionar a versão no nome do objeto, forçando cada modificação de seu conteúdo a ser tratada como um novo objeto pela Azion.

Para versionar seus objetos, você pode usar um número sequencial, um *timestamp* ou qualquer mecanismo que considere apropriado como marcação de versionamento. Por exemplo, em vez de nomear uma imagem como `image.jpg`, você pode nomeá-la `image_1.jpg` e, quando precisar atualizá-la, alterar a versão para `image_2.jpg`.

Dessa forma, cada atualização de conteúdo será tratada como um novo objeto pela Azion. Isto lhe permite controlar qual objeto uma requisição deve retornar, mesmo que o usuário tenha a versão anterior salva localmente no cache do navegador ou em algum cache intermediário.
Você também poderá fornecer diferentes versões de seus objetos para diferentes usuários e simplificar o processo de rollback em caso de problemas com sua atualização.

### Método `DEL`

Se você utilizar o método `DEL` para remover o objeto do cache em vez de **Real-Time Purge**, a próxima requisição de conteúdo do usuário será um método `GET` para a origem. No entanto, isso impede que a Azion entregue [objetos stale](/pt-br/documentacao/produtos/build/applications/cache/#stale-cache) se a origem estiver inacessível, entregando uma página de erro em seu lugar.

Você pode usar o `DEL` se seu objetivo for:

- Remover o conteúdo do cache da Azion após ele ter sido removido da origem.
- Forçar a remoção e a atualização de conteúdos para os quais o *timestamp* não seja confiável.
- Forçar a entrega de uma página de erro em vez de um objeto obsoleto se sua origem estiver inacessível e a Azion não puder obter a versão mais recente de seu conteúdo.

---

## Layer

O **Real-Time Purge** oferece duas opções de camadas para limpar seu cache:

- **Cache**: limpa o cache que é mantido no edge.
- **Tiered Cache**: limpa o cache da camada tiered cache no edge. Requer que o módulo [Tiered Cache](/pt-br/documentacao/produtos/build/applications/cache/tiered-cache/) esteja ativo.

---

## URL Purge

Limpa objetos em cache através de uma lista de URLs como argumento.

A purge por URL é não recursiva, ou seja, somente URLs inseridas serão removidas do cache. As URLs são convertidas automaticamente em suas respectivas *cache keys*, sem considerar qualquer variação de conteúdo na URL. 

:::note
As variações de conteúdo baseadas em cookies, grupos de dispositivos, imagens processadas ou outros não expiram com essa operação. Considere o uso de purge por [cache key](#cache-key-purge) ou [wildcard](#wildcard-purge) para essas situações.
:::

A expiração das variações de conteúdo com base na query string pode ser executada usando a purge de URL, já que uma query string é um componente da URL, desde que os argumentos usados para a variação de conteúdo sejam enviados na ordem correta em que foram apresentados. Se você tiver ativado [Query String Sort](/pt-br/documentacao/produtos/build/applications/cache-settings/#cache-by-query-string), classifique os argumentos na requisição ou considere o uso da *cache key purge* ou da *wildcard purge* como alternativa.

### Argumentos de purge por URL

O formato da URL deve respeitar o padrão: `scheme://host` ou apenas `host`, seguido ou não de um `/path` e da `?query-string`. Quando o `scheme` não for informado, o conteúdo será eliminado tanto de HTTP quanto de HTTPS.

:::caution
Se você usar o caractere asterisco (`*`) em uma **URL Purge**, ele será tratado como um caractere na URL e não como um wildcard.
:::

Por exemplo:

- `http://www.seudominio.com`
- `http://static.seudominio.com/include/site.css`
- `https://static.seudominio.com/include/site.js`
- `dynamic.seudominio.com/app.py?argumento`

---

## Cache Key Purge

Limpa objetos em cache através de uma lista de [cache keys](/pt-br/documentacao/produtos/build/applications/cache/#cache-keys) como argumento. 

Uma cache key é uma entrada de índice para um objeto no cache da Azion. O formato padrão de cache key adotado pela Azion para identificar objetos em cache concatena os seguintes elementos de sintaxe de uma URI: `scheme`, `host` e `path`. Por exemplo, a URI `https://static.yourdomain.com/include/site.js` irá gerar a cache key `httpsstatic.yourdomain.com/include/site.js`.

Você pode especificar uma cache key para identificar diferentes variações de um objeto, com base em:

- Query string ou argumentos de classificação de query string.
- Cookies ao usar [Advanced Cache Key](/pt-br/documentacao/produtos/build/applications/cache-settings/#advanced-cache-key).
- Formato de imagem de acordo com o suporte do navegador ao usar [Image Processor](/pt-br/documentacao/produtos/build/applications/image-processor/).

Para fazer o purge de todas as variações, você precisa executar a limpeza de cada cache key gerada.

---

## Wildcard Purge

Limpa o objeto em cache fornecendo uma expressão wildcard como argumento.

### Argumentos de purge por wildcard

O formato da expressão wildcard deve estar de acordo com o padrão: `scheme://host` ou apenas `host`, seguido ou não de `/path` e `?query-string`, com um caractere de asterisco (`*`) no `path` ou na query string. Você pode até usar vários wildcards para corresponder a um padrão complexo de um `path`.

Por exemplo:

- `www.seudominio.com/*`
- `static.seudominio.com/include/*.css`
- `static.seudominio.com/*/site.js`
- `static.seudominio.com/static/images/image_1.jpg?ims=*`
- `www.seudominio.com/alpha*`
- `www.seudominio.com/*beta*`
- `www.seudominio.com/*a*/charlie`
- `www.seudominio.com/*a*/*a*`
- `www.seudominio.com/*?b*`
- `www.seudominio.com/*?*2*c=*`

:::note
Você não pode fazer a limpeza do **Tiered Cache** usando uma expressão wildcard.
:::

---

## Purge de Application Accelerator

Você pode fazer o purge de objetos com variação de conteúdo baseada em cookies ou query strings usando a funcionalidade **Advanced Cache Key** do módulo [Application Accelerator](/pt-br/documentacao/produtos/build/applications/application-accelerator/). 

Além de `host` e `path`, a cache key deve incluir o separador `@@` seguido do nome dos cookies usados e seus valores. Ela também termina em `;`.

Para remover objetos com [variação baseada em cookies](/pt-br/documentacao/produtos/build/applications/cache/#advanced-cache-key), você pode usar a purge por cache key, inserindo todas as variações individualmente, ou uma purge por wildcard, usando `@@*` no final.

Para remover objetos com [variação com base na query string](/pt-br/documentacao/produtos/build/applications/cache/#advanced-cache-key), você pode usar: 

1. Purge por cache key, inserindo todas as variações individualmente.
2. Purge por wildcard, usando `?*` no final.
3. Purge por URL, inserindo apenas os argumentos usados na cache key na URL.

Se você usar **Query String Sort**, os argumentos deverão ser enviados na ordem alfabética.

---

## Purge do Image Processor

Você pode remover imagens que são tratadas pelo [Image Processor](/pt-br/documentacao/produtos/build/applications/image-processor/).

Além de `host` e `path`, a cache key deve incluir o separador `?`, key-value pairs relacionados ao tipo de processamento e o separador `@@` para identificar a variação de formato de imagem compatível com o navegador. Por exemplo:

- `httpstatic.seudominio.com/static/images/image.jpg@@`
- `httpstatic.seudominio.com/static/images/image.jpg@@webp`
- `httpstatic.seudominio.com/static/images/image.jpg?ims=88x@@`
- `httpstatic.seudominio.com/static/images/image.jpg?ims=88x@@webp`

Você pode usar um purge por cache key, inserindo todas as variações individualmente, ou um purge por wildcard, usando `*` no final.

---

## Purge de arquivos fragmentados com Large File Optimization

Se você usar o recurso [Large File Optimization](/pt-br/documentacao/produtos/build/applications/cache-settings/#large-file-optimization) em sua aplicação, arquivos grandes ainda poderão permanecer no cache. Para realizar o purge nesse caso, você deve listar as cache keys de cada fatia individualmente.

:::caution
Ao limpar fatias individuais, seu conteúdo pode estar sujeito a problemas caso haja uma alteração de conteúdo na origem e fatias desatualizadas permaneçam no cache.
:::

Para fazer o purge de todas as fatias de arquivos usando essa configuração, você pode fazer um [purge por wildcard](#wildcard-purge):

- `static.seudominio.com/midias/arquivo.mp4*`

---

## Purge de métodos HTTP

Por padrão, a Azion permite o cache apenas dos métodos `GET` e `HEAD`. Você pode ativar o cache de `POST` ou `OPTIONS` com o módulo [Application Accelerator](/pt-br/documentacao/produtos/build/applications/application-accelerator/#support-for-http-methods).

Para limpar esses objetos, você pode usar uma [purge por cache key](#cache-key-purge), inserindo todas as variações individualmente, ou uma [purge por wildcard](#wildcard-purge), usando `@@*` no final.

---

## Confirmação de purge

Após criar uma nova purge, você receberá uma mensagem de sucesso para confirmar a criação. Em seguida, a purge é colocada na fila para execução e aparecerá no histórico assim que concluída. Isso ocorre porque os resultados podem levar algum tempo para se propagar para todos os edge nodes.

Quando necessário, você pode consultar o histórico de purge para filtrar o usuário que fez o purge, a hora, a lista de argumentos, o tipo e o método de purge.

---

## Limites

:::tip
**Aumente limites** <br></br>
Você pode solicitar o aumento dos limites com base no seu plano. Contate o [time de suporte técnico](/pt-br/documentacao/servicos/suporte/) para fazer a solicitação.
:::

Estes são os **limites default**:

| Escopo | Limite |
| --- | --- |
| Tamanho de Wildcard | 256 caracteres |
| Tamanho de URL e Cache Key | 4.096 caracteres |
| Tempo de histórico de purge | 6 meses |
| Número de requests em histórico | 1.000.000 |
| URL e Cache Key - Operações por cliente | 200 requests com 50 objetos por request |
| URL e Cache Key - Operações por minuto | 10.000 objects a cada 60 segundos |
| Wildcard - Operações por dia (intervalo de 24h) | 2.000 requests |
| Wildcard por request | 1 |

Estes são os **limites default** para cada Plano de Serviço:

| Escopo | Developer | Business, Enterprise e Mission Critical |
| --- | --- | --- |
| Operações de purge | 1.000 por mês | 1,000 por mês<br />Operações adicionais de purge são negociáveis |

:::tip
**Aumente limites** <br></br>
Você pode solicitar o aumento dos limites com base no seu plano. Contate o [time de suporte técnico](/pt-br/documentacao/servicos/suporte/) para fazer a solicitação.
:::

---