Configurar el caché de objetos

En esta página

El caché por solicitud de EmDash ya deduplica lecturas idénticas durante el renderizado de una página. El caché de objetos opcional mantiene resultados de consultas seleccionados entre solicitudes, permitiendo que una solicitud posterior evite la misma lectura de base de datos. Es útil cuando el tráfico público genera más lecturas de base de datos de las que el backend seleccionado debería soportar.

La base de datos sigue siendo la fuente de verdad. Las lecturas del caché fallan en abierto hacia la base de datos, y las escrituras invalidan el namespace del caché afectado. El caché de objetos está deshabilitado por defecto; habilítelo agregando un adaptador objectCache a la integración emdash().

Resumen

BackendMejor paraCompartido entre aislamientos
KVCloudflare WorkersSí
MemoryNode.js, desarrollo localNo (por proceso)

En Cloudflare, las solicitudes las atienden muchos aislamientos efímeros repartidos por regiones. KV es compartido por todos ellos, de modo que un valor almacenado en caché por una solicitud está disponible para la siguiente, en cualquier lugar. El backend de memoria almacena en caché dentro de un único proceso, lo cual encaja con un servidor Node.js de larga duración.

Cloudflare KV

Configure el adaptador KV y apúntelo a un 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" }),
		}),
	],
});

Configuración

Cree un namespace KV y agregue el binding a su configuración de Wrangler.

npx wrangler kv namespace create CACHE

El comando imprime un id del namespace. Agréguelo bajo el nombre del binding usado en kvCache:

wrangler.jsonc

{
  "kv_namespaces": [
    {
      "binding": "CACHE",
      "id": "<namespace-id>"
    }
  ]
}

wrangler.toml

[[kv_namespaces]]
binding = "CACHE"
id = "<namespace-id>"

Opciones

OpciónTipoPredeterminadoDescripción
bindingstring—Nombre del binding KV de su configuración de Wrangler. Obligatorio.
defaultTtlnumber3600Tiempo de vida de las entradas en caché, en segundos. KV impone un mínimo de 60 segundos.
revalidatenumber1000Ventana de reutilización de epoch local al aislamiento, en milisegundos. Vea Frescura.
timeoutnumber2000Tiempo máximo, en milisegundos, para esperar una operación KV antes de tratarla como fallo de caché. Evita que una lectura KV bloqueada cuelgue la solicitud. Establezca en 0 para deshabilitar.
keyPrefixstring"em"Prefijo para cada clave de caché. Establezca un valor único cuando varios sitios compartan un namespace.

Node.js (memoria)

El adaptador de memoria almacena en caché dentro del proceso del servidor. No requiere 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ónTipoPredeterminadoDescripción
defaultTtlnumber3600Tiempo de vida de las entradas en caché, en segundos.
revalidatenumber1000Ventana de reutilización de epoch local al aislamiento, en ms.
maxEntriesnumber1000Número máximo de claves en caché antes de desalojar las más antiguas.
keyPrefixstring"em"Prefijo para cada clave de caché.

Qué se almacena en caché

El caché de objetos cubre las lecturas que se ejecutan en un renderizado de página típico:

  • Consultas de contenido: getEmDashCollection, getEmDashEntry y resolveEmDashPath.
  • 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 gestionan aquí. Para almacenar en caché HTML renderizado en el edge, vea Desplegar en Cloudflare.

El caché de objetos y un caché HTML en el edge resuelven problemas distintos. Un acierto en la capa HTML no ejecuta EmDash. Un fallo ejecuta el Worker, y una respuesta que puede rellenar la caché de rutas de Astro omite el caché de objetos. Sus consultas de contenido leen desde la base de datos, lo que impide que una página purgada tras un cambio de contenido se reconstruya con una instantánea KV anterior.

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 borra las consultas en caché de su colección; cambiar un byline o un término de taxonomía borra las entradas que lo muestran.

Para las solicitudes que no rellenan la caché de rutas, un cambio tarda un tiempo en aparecer en todos los aislamientos a medida que adoptan el epoch actualizado. Con el backend de memoria local al aislamiento esto es inmediato. Con Workers KV está acotado por la propagación de la caché edge de KV (consistencia eventual, hasta ~60 segundos) más la ventana revalidate local al aislamiento (un segundo por defecto). Reduzca revalidate para una propagación local más rápida a costa de más lecturas contra el caché; auméntelo para leer el caché con menos frecuencia.

Contenido programado

Las entradas programadas se vuelven visibles cuando pasa su hora de publicación. Una página en caché refleja una entrada programada recién publicada en el siguiente cambio de su colección, o cuando expira el defaultTtl de la entrada en caché. Si la publicación programada precisa importa para su sitio, establezca un defaultTtl más bajo.