# Real-Time Purge

O **Real-Time Purge** remove um objeto em cache do [Cache](/pt-br/documentacao/plataforma/applications/#cache), ou do [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/), antes do fim do seu TTL, de modo que a requisição seguinte busca a versão atual na origem. Um purge recebe um de três argumentos: uma lista de URLs, uma lista de cache keys ou uma expressão com wildcard. A Azion coloca o purge em fila depois da confirmação e o lista no histórico de purges quando ele termina. Use um purge para entregar uma atualização que a origem já tem, para remover um objeto obsoleto, ou para manter o controle do que a Azion entrega em conteúdo dinâmico. Para os passos, consulte [Purgue conteúdo em cache](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/purgar-conteudo-em-cache/). Para o formato de uma key, consulte [Cache keys](/pt-br/documentacao/plataforma/applications/cache/cache-keys/).

---

## Interfaces

Cinco interfaces enviam o mesmo purge. Cada uma nomeia o tipo de purge, carrega a lista de argumentos e nomeia a camada.

| Interface                                                  | Purge                                                                                                                                                                                                                                                 |
| ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Azion Console](https://console.azion.com/)                | **Real-Time Purge**, onde você escolhe o tipo de purge e a camada e insere a lista de argumentos. Para os passos, consulte [Purgue conteúdo em cache](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/purgar-conteudo-em-cache/) |
| [Azion API v4](/pt-br/documentacao/devtools/api/)          | `POST /v4/workspace/purge/{purge_type}`, com `purge_type` igual a `url`, `cachekey` ou `wildcard`, e um corpo com `items` e `layer`                                                                                                                   |
| Azion CLI                                                  | [`azion purge`](/pt-br/documentacao/devtools/cli/purge/) com `--urls`, `--cachekey` ou `--wildcard`, e `--layer`                                                                                                                                      |
| `azion.config.js`                                          | Uma entrada do array `purge`, do tipo `AzionPurge`, com `type`, `items` e `layer`                                                                                                                                                                     |
| [Azion Lib](/pt-br/documentacao/devtools/azion-lib/purge/) | `purgeURL`, `purgeCacheKey` e `purgeWildCard`, de `azion/purge`                                                                                                                                                                                       |

A API autentica com um personal token no header `Authorization: Token <token>`. Para mais informações, consulte [Personal tokens](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/).

---

## Camadas

Um purge nomeia a camada que ele limpa. O campo `layer` do corpo da API e a flag `--layer` da CLI são opcionais, e os dois têm `cache` como padrão.

| Camada       | Valor na API      | O que ela purga                                                                                                                                                                           |
| ------------ | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cache        | `cache`, o padrão | Os objetos em cache na infraestrutura distribuída da Azion                                                                                                                                |
| Tiered Cache | `tiered_cache`    | Os objetos da segunda camada de cache, em aplicações cujo cache setting tem o módulo ativo; apenas por cache key. Um purge por URL ou por wildcard com essa camada retorna o erro `30001` |

Para purgar um objeto das duas camadas, purgue primeiro o Tiered Cache e depois o Cache, para que o cache não seja reabastecido por uma cópia desatualizada do Tiered Cache.

---

## Tipos de purge

O segmento `purge_type` do path da API, a flag da CLI e o tipo de purge do Console nomeiam os mesmos três tipos.

| Tipo      | `purge_type` | Argumento                  | Por requisição | Camadas                 |
| --------- | ------------ | -------------------------- | -------------- | ----------------------- |
| URL       | `url`        | Uma lista de URLs          | Até 50         | `cache`                 |
| Cache key | `cachekey`   | Uma lista de cache keys    | Até 50         | `cache`, `tiered_cache` |
| Wildcard  | `wildcard`   | Uma expressão com wildcard | 1              | `cache`                 |

### Purge por URL

Um purge por URL recebe uma lista de URLs e não é recursivo: apenas as URLs da lista saem do cache. A Azion converte cada URL na sua cache key sem variação de conteúdo, então uma variação por cookie, device group ou formato de imagem não expira com ele. Purgue essas variações com um purge por cache key ou por wildcard. Uma variação por query string faz parte da URL, então ela expira quando os argumentos estão na mesma ordem da cache key. Com o **Sort** ativo no cache setting, envie os argumentos em ordem alfabética, ou use um purge por cache key ou por wildcard. Para o controle **Sort**, consulte [Cache settings](/pt-br/documentacao/plataforma/applications/cache/cache-settings/#application-accelerator).

Uma URL é `scheme://host` ou `host`, com um `/path` e uma `?query-string` opcionais. Sem scheme, a Azion purga as cópias em HTTP e em HTTPS. Um asterisco (`*`) em um purge por URL é um caractere literal, e não um wildcard. A lista abaixo carrega quatro argumentos válidos de URL:

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

### Purge por cache key

Um purge por cache key recebe uma lista de cache keys. Uma key nomeia uma variação de um objeto. Ela pode variar por query string, com ou sem **Sort**, por cookie, por device group ou por método da requisição pela **Advanced Cache Key** do [Application Accelerator](/pt-br/documentacao/plataforma/applications/#application-accelerator), ou por formato de imagem pelo [Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor). Para purgar todas as variações de um objeto, liste cada key. Um purge por cache key é o único tipo que alcança a camada do Tiered Cache.

### Purge por wildcard

Um purge por wildcard recebe uma expressão: `scheme://host` ou `host`, com um `/path` e uma `?query-string` opcionais, e um asterisco (`*`) no path ou na query string. Vários asteriscos casam um path mais complexo. Cada requisição carrega uma expressão, e um purge por wildcard alcança apenas a camada do Cache, e não o Tiered Cache. A lista abaixo carrega dez expressões válidas:

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

---

## Purgue conteúdo que varia

Quando um cache setting varia a cache key, um objeto tem uma key por variação. A tabela nomeia o purge que alcança cada tipo de variação.

| Variação                    | Como purgar                                                                                                                                                                                         |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cookies                     | Um purge por cache key que lista cada variação, ou um purge por wildcard com `@@*` no fim                                                                                                           |
| Query string                | Um purge por cache key que lista cada variação, um purge por wildcard com `?*` no fim, ou um purge por URL que nomeia apenas os argumentos da key, em ordem alfabética quando o **Sort** está ativo |
| Device group                | Um purge por cache key que lista cada variação, ou um purge por wildcard                                                                                                                            |
| Image Processor             | Um purge por cache key que lista cada variação, ou um purge por wildcard com `*` no fim                                                                                                             |
| Large File Optimization     | Um purge por cache key que lista a key de cada fragmento, ou um purge por wildcard como `static.example.com/media/file.mp4*`                                                                        |
| `POST` e `OPTIONS` em cache | Um purge por cache key que lista cada variação, ou um purge por wildcard com `@@*` no fim                                                                                                           |

As variações por query string, por cookie, por device group e por método da requisição vêm da **Advanced Cache Key**, um recurso do [Application Accelerator](/pt-br/documentacao/plataforma/applications/#application-accelerator). O mesmo módulo coloca em cache respostas `POST` e `OPTIONS`; sem ele, a Azion coloca em cache apenas `GET` e `HEAD`. Para os behaviors, consulte [Configurações do Application Accelerator](/pt-br/documentacao/plataforma/applications/application-accelerator/configuracoes/).

Uma imagem que o [Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor) entrega tem uma key por processamento e por formato. A key carrega o host e o path, os argumentos de processamento depois do separador `?`, e o formato depois de `@@`. As quatro keys abaixo pertencem a uma imagem:

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

Com o **Large file optimization** ativo, a Azion coloca um objeto grande em cache em fragmentos, cada um com a sua própria key. O arquivo pode permanecer em cache depois de um purge da sua URL. Para purgá-lo, liste a key de cada fragmento, ou use o wildcard `static.example.com/media/file.mp4*`, que limpa cada fragmento de um arquivo.

> **Atenção**
>
> Um purge de fragmentos individuais pode deixar fragmentos antigos e novos lado a lado. Quando o arquivo muda na origem, um fragmento que não foi purgado permanece no cache ao lado dos fragmentos buscados novamente.

---

## Corpo da requisição

A API lê o tipo de purge no path e os argumentos em `items`. O corpo abaixo envia um purge por URL pelo `POST /v4/workspace/purge/url`:

```json
{"items":["https://www.example.com/include/site.js"],"layer":"cache"}
```

Um purge por wildcard vai pelo `POST /v4/workspace/purge/wildcard`; sem `layer`, a API purga o `cache`:

```json
{"items":["www.example.com/include/*.css"]}
```

Um purge por cache key vai pelo `POST /v4/workspace/purge/cachekey`:

```json
{"items":["httpswww.example.com/include/site.js"],"layer":"cache"}
```

Cada requisição responde com HTTP `201`, `state` igual a `executed` e os itens e a camada em `data`:

```json
{"state":"executed","data":{"items":[...],"layer":"cache"}}
```

A CLI envia os mesmos três purges pela linha de comando, o último para a camada do Tiered Cache:

```bash
azion purge --urls "https://www.example.com/include/site.js"
azion purge --wildcard "www.example.com/include/*.css"
azion purge --cachekey "httpswww.example.com/include/site.js" --layer tiered_cache
```

Cada comando imprime uma linha:

```text
Purge carried out successfully
```

Depois do purge, a requisição seguinte pelo objeto retorna `x-cache: MISS`, porque a Azion o busca na origem novamente.

---

## Confirmação

Depois que você cria um purge, uma mensagem confirma a criação. A Azion então coloca o purge em fila, e ele aparece no histórico de purges quando termina, porque o resultado leva tempo para propagar pela infraestrutura distribuída da Azion. O histórico pode ser filtrado pelo usuário que fez o purge, pelo horário, pela lista de argumentos, pelo tipo de purge e pelo método.

---

## Erros

A API responde cada requisição abaixo com HTTP `400`. O corpo carrega o código, o título e um detalhe.

| Código  | Título                               | Causa                                                                                                                                                                                                                                                                            | O que fazer                                                                                                                                      |
| ------- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `30001` | `Invalid Purge Layer For Purge Type` | `layer` é `tiered_cache` em um purge `url` ou `wildcard`; o detalhe diz `Invalid purge layer for purge type "url".`                                                                                                                                                              | Purgue o Tiered Cache por cache key, ou defina `layer` como `cache`.                                                                             |
| `30003` | `Unauthorized Domain`                | Um item nomeia um domínio que a conta não possui; o detalhe diz `The domain is not authorized for your account.`                                                                                                                                                                 | Corrija o domínio no item. Um purge alcança apenas os domínios da conta.                                                                         |
| `30005` | `Invalid Purge Cachekey`             | Um item de um purge `cachekey` não é uma cache key válida; o detalhe diz `The Content must be a valid cachekey.`                                                                                                                                                                 | Envie a key como o header `x-cache-key` a mostra; o formato está em [Cache keys](/pt-br/documentacao/plataforma/applications/cache/cache-keys/). |
| `10065` | `List Field Max Length`              | `items` tem mais de 50 elementos em um purge `url` ou `cachekey`, com o detalhe `Ensure this field has no more than 50 elements.`; ou mais de 1 elemento em um purge `wildcard`, com o detalhe `Ensure this field has no more than 1 elements.` e `meta.max_length` igual a `1`. | Divida a lista em requisições de 50 itens ou menos, e envie uma expressão com wildcard por requisição.                                           |

---

## Limites

Os limites abaixo se aplicam a requisições de purge. Cada linha nomeia a resposta da API além do valor, onde uma fonte a informa.

| Valor                                            | Limite                                        | Além do limite                                                 |
| ------------------------------------------------ | --------------------------------------------- | -------------------------------------------------------------- |
| Tamanho de uma URL ou cache key                  | 4.096 caracteres                              | Nenhum erro é documentado                                      |
| Requisições por URL e cache key por cliente      | 200 requisições, 50 objetos por requisição    | HTTP `400`, erro `10065` acima de 50 objetos em uma requisição |
| Objetos por minuto em purges por URL e cache key | 10.000 objetos a cada 60 segundos             | Nenhum erro é documentado                                      |
| Requisições de purge por wildcard por dia        | 2.000 requisições em um intervalo de 24 horas | Nenhum erro é documentado                                      |
| Tamanho de uma expressão com wildcard            | 256 caracteres                                | Nenhum erro é documentado                                      |
| Expressões com wildcard por requisição           | 1                                             | HTTP `400`, erro `10065`                                       |
| Histórico de purges                              | 1.000.000 de requisições                      | Nenhum erro é documentado                                      |
| Retenção do histórico de purges                  | 6 meses                                       | Nenhum erro é documentado                                      |

Para os purges que cada plano inclui, consulte [Limites de Applications](/pt-br/documentacao/plataforma/applications/limites/#cache).

---

## Recursos relacionados

- [Purgue conteúdo em cache](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/purgar-conteudo-em-cache.md): Os passos no Console, na API e na CLI que enviam um purge por URL, cache key ou wildcard.
- [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache.md): A segunda camada de cache que um purge por cache key limpa.
- [Expiração e atualização](/pt-br/documentacao/plataforma/applications/cache/expiracao-e-atualizacao.md): O que o TTL e o stale cache fazem em uma requisição, e o que um purge altera.
- [Boas práticas de Applications](/pt-br/documentacao/plataforma/applications/boas-praticas.md#cache): Nomes de objeto versionados como alternativa ao purge.
