EmDash lee el contenido y la configuración del sitio desde la base de datos en cada solicitud. La caché de objetos almacena esos resultados de consultas en un almacén rápido de clave/valor, de modo que las solicitudes repetidas se sirven desde la caché en lugar de la base de datos. Reduce la carga de lectura en la base de datos — útil en Cloudflare, donde KV sirve muchas más solicitudes por segundo que D1.
La caché de objetos es opcional y está deshabilitada por defecto. Habilítala añadiendo un adaptador objectCache a la integración emdash().
Visión general
| Backend | Ideal para | Compartido entre isolates |
|---|---|---|
| KV | Cloudflare Workers | Sí |
| Memory | Node.js, desarrollo local | No (por proceso) |
En Cloudflare, las solicitudes son servidas por muchos isolates de corta duración en diferentes regiones. KV es compartido por todos ellos, así que un valor almacenado en caché por una solicitud está disponible para la siguiente, en cualquier lugar. El backend de memoria almacena dentro de un único proceso, lo cual es adecuado para un servidor Node.js de larga duración.
Cloudflare KV
Configura el adaptador KV y apúntalo a un binding de 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" }),
}),
],
});
Configuración
Crea un namespace KV y añade el binding a tu configuración de Wrangler.
npx wrangler kv namespace create CACHE
El comando imprime un id de namespace. Añádelo bajo el nombre de binding usado en kvCache:
wrangler.jsonc
{
"kv_namespaces": [
{
"binding": "CACHE",
"id": "<namespace-id>"
}
]
} wrangler.toml
[[kv_namespaces]]
binding = "CACHE"
id = "<namespace-id>" Opciones
| Opción | Tipo | Por defecto | Descripción |
|---|---|---|---|
binding | string | — | Nombre del binding KV de tu configuración de Wrangler. Requerido. |
defaultTtl | number | 3600 | Tiempo de vida para entradas en caché, en segundos. KV impone un mínimo de 60 segundos. |
revalidate | number | 1000 | Ventana de reutilización de época local del isolate, en milisegundos. Ver Frescura. |
timeout | number | 2000 | Tiempo máximo en milisegundos para esperar una operación KV antes de tratarla como miss de caché. Protege contra una lectura KV bloqueada que detenga la solicitud. Establecer a 0 para desactivar. |
keyPrefix | string | "em" | Prefijo para cada clave de caché. Establece un valor único cuando varios sitios comparten un namespace. |
Node.js (memoria)
El adaptador de memoria almacena en caché dentro del proceso del servidor. No necesita ningún servicio 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(),
}),
],
});
Opciones
| Opción | Tipo | Por defecto | Descripción |
|---|---|---|---|
defaultTtl | number | 3600 | Tiempo de vida para entradas en caché, en segundos. |
revalidate | number | 1000 | Ventana de reutilización de época local del isolate, en ms. |
maxEntries | number | 1000 | Número máximo de claves en caché antes de desalojar las más antiguas. |
keyPrefix | string | "em" | Prefijo para cada clave de caché. |
Qué se almacena en caché
La caché de objetos cubre las lecturas que se ejecutan en un renderizado de página típico:
- Consultas de contenido:
getEmDashCollection,getEmDashEntryyresolveEmDashPath. - Configuración del sitio, menús de navegación y términos de taxonomía.
Las solicitudes de la API de administración, los archivos multimedia y las respuestas HTML completas no se manejan aquí. Para almacenar en caché HTML renderizado en el edge, consulta Desplegar en Cloudflare.
Frescura
Editar contenido a través del panel de administración o la API REST invalida automáticamente las entradas de caché afectadas. Crear, actualizar, publicar o eliminar una entrada limpia las consultas en caché para su colección; cambiar una firma o un término de taxonomía limpia las entradas que lo muestran.
Para los visitantes anónimos, un cambio tarda un tiempo en aparecer en todos los isolates a medida que estos recogen la época actualizada. Con el backend de memoria dentro del isolate esto es inmediato. Con Workers KV está limitado por la propagación de la caché edge de KV (consistencia eventual, hasta ~60 segundos) más la ventana revalidate local del isolate (por defecto un segundo). Reduce revalidate para una propagación local más rápida a costa de más lecturas contra la caché; auméntalo para leer la caché con menos frecuencia.
Contenido programado
Las entradas programadas se hacen visibles cuando pasa su hora de publicación. Una página en caché refleja una entrada programada recién publicada en el siguiente cambio a su colección, o cuando el defaultTtl de la entrada en caché caduca. Si la publicación programada precisa importa para tu sitio, establece un defaultTtl más bajo.