O cache por requisição do EmDash já deduplica leituras idênticas durante o rendering de uma página. O cache de objetos opcional mantém resultados de consultas selecionados entre requisições, permitindo que uma requisição posterior evite a mesma leitura de banco de dados. É útil quando o tráfego público cria mais leituras de banco do que o backend selecionado deveria lidar.
O banco de dados permanece como fonte de verdade. Leituras do cache falham abertamente para o banco, e escritas invalidam o namespace do cache afetado. O cache de objetos está desabilitado por padrão; habilite-o adicionando um adaptador objectCache à integração emdash().
Visão geral
| Backend | Melhor para | Compartilhado entre isolados |
|---|---|---|
| KV | Cloudflare Workers | Sim |
| Memory | Node.js, desenvolvimento local | Não (por processo) |
No Cloudflare, requisições são servidas por muitos isolados efêmeros em diferentes regiões. KV é compartilhado por todos, então um valor armazenado em cache por uma requisição está disponível para a próxima, em qualquer lugar. O backend de memória armazena dentro de um único processo, adequado para um servidor Node.js de longa execução.
Cloudflare KV
Configure o adaptador KV e aponte-o para um binding KV:
import emdash from "emdash/astro";
import { d1, r2, kvCache } from "@emdash-cms/cloudflare";
export default defineConfig({
integrations: [
emdash({
database: d1({ binding: "DB" }),
storage: r2({ binding: "MEDIA" }),
objectCache: kvCache({ binding: "CACHE" }),
}),
],
});
Configuração
Crie um namespace KV e adicione o binding à sua configuração do Wrangler.
npx wrangler kv namespace create CACHE
O comando imprime um id do namespace. Adicione-o sob o nome do binding usado em kvCache:
wrangler.jsonc
{
"kv_namespaces": [
{
"binding": "CACHE",
"id": "<namespace-id>"
}
]
} wrangler.toml
[[kv_namespaces]]
binding = "CACHE"
id = "<namespace-id>" Opções
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
binding | string | — | Nome do binding KV da sua configuração Wrangler. Obrigatório. |
defaultTtl | number | 3600 | Tempo de vida das entradas em cache, em segundos. KV impõe um mínimo de 60 segundos. |
revalidate | number | 1000 | Janela de reutilização de epoch local ao isolado, em milissegundos. Veja Frescor. |
timeout | number | 2000 | Tempo máximo, em milissegundos, para esperar uma operação KV antes de tratá-la como cache miss. Protege contra uma leitura KV travada que pendure a requisição. Defina como 0 para desabilitar. |
keyPrefix | string | "em" | Prefixo para cada chave de cache. Defina um valor único quando vários sites compartilham um namespace. |
Node.js (memória)
O adaptador de memória armazena em cache dentro do processo do servidor. Não precisa de serviço externo:
import emdash, { memoryCache } from "emdash/astro";
import { sqlite } from "emdash/db";
export default defineConfig({
integrations: [
emdash({
database: sqlite({ url: "file:./data.db" }),
objectCache: memoryCache(),
}),
],
});
Opções
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
defaultTtl | number | 3600 | Tempo de vida das entradas em cache, em segundos. |
revalidate | number | 1000 | Janela de reutilização de epoch local ao isolado, em ms. |
maxEntries | number | 1000 | Número máximo de chaves em cache antes de remover as mais antigas. |
keyPrefix | string | "em" | Prefixo para cada chave de cache. |
O que é armazenado em cache
O cache de objetos cobre as leituras executadas em um rendering de página típico:
- Consultas de conteúdo:
getEmDashCollection,getEmDashEntryeresolveEmDashPath. - Configurações do site, menus de navegação e termos de taxonomia.
Requisições da API admin, arquivos de mídia e respostas HTML completas não são tratados aqui. Para armazenar HTML renderizado em cache no edge, veja Implantar no Cloudflare.
O cache de objetos e um cache HTML no edge resolvem problemas diferentes. Um cache miss na camada HTML ainda executa o Worker; o cache de objetos pode então prevenir consultas de conteúdo repetidas. Um cache hit na camada HTML não executa o EmDash de forma alguma.
Frescor
Editar conteúdo pelo painel admin ou pela API REST invalida automaticamente as entradas de cache afetadas. Criar, atualizar, publicar ou deletar uma entrada limpa as consultas em cache para sua coleção; alterar um nome de autor ou termo de taxonomia limpa as entradas que o exibem.
Para visitantes anônimos, uma mudança leva tempo para aparecer em todos os isolados à medida que pegam o epoch atualizado. Com o backend de memória no isolado, isso é imediato. Com Workers KV, é limitado pela propagação do cache edge do KV (consistência eventual, até ~60 segundos) mais a janela revalidate local ao isolado (padrão um segundo). Diminua revalidate para propagação local mais rápida ao custo de mais leituras contra o cache; aumente para ler o cache com menos frequência.
Conteúdo agendado
Entradas agendadas ficam visíveis quando sua hora de publicação passa. Uma página em cache reflete uma entrada agendada recém-publicada na próxima mudança em sua coleção, ou quando o defaultTtl da entrada em cache expira. Se a publicação agendada precisa é importante para seu site, defina um defaultTtl mais baixo.