EmDash lit le contenu et la configuration du site depuis la base de données à chaque requête. Le cache d’objets stocke ces résultats de requêtes dans un magasin clé/valeur rapide, afin que les requêtes répétées soient servies depuis le cache au lieu de la base de données. Il réduit la charge de lecture sur la base de données — utile sur Cloudflare, où KV sert beaucoup plus de requêtes par seconde que D1.
Le cache d’objets est optionnel et désactivé par défaut. Activez-le en ajoutant un adaptateur objectCache à l’intégration emdash().
Vue d’ensemble
| Backend | Idéal pour | Partagé entre isolates |
|---|---|---|
| KV | Cloudflare Workers | Oui |
| Memory | Node.js, développement local | Non (par processus) |
Sur Cloudflare, les requêtes sont servies par de nombreux isolates éphémères dans différentes régions. KV est partagé par tous, donc une valeur mise en cache par une requête est disponible pour la suivante, partout. Le backend mémoire met en cache au sein d’un seul processus, ce qui convient à un serveur Node.js de longue durée.
Cloudflare KV
Configurez l’adaptateur KV et pointez-le vers 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" }),
}),
],
});
Configuration
Créez un namespace KV et ajoutez le binding à votre configuration Wrangler.
npx wrangler kv namespace create CACHE
La commande affiche un id de namespace. Ajoutez-le sous le nom de binding utilisé dans kvCache :
wrangler.jsonc
{
"kv_namespaces": [
{
"binding": "CACHE",
"id": "<namespace-id>"
}
]
} wrangler.toml
[[kv_namespaces]]
binding = "CACHE"
id = "<namespace-id>" Options
| Option | Type | Défaut | Description |
|---|---|---|---|
binding | string | — | Nom du binding KV de votre configuration Wrangler. Requis. |
defaultTtl | number | 3600 | Durée de vie des entrées en cache, en secondes. KV impose un minimum de 60 secondes. |
revalidate | number | 1000 | Fenêtre de réutilisation d’époque locale à l’isolate, en millisecondes. Voir Fraîcheur. |
timeout | number | 2000 | Temps maximum en millisecondes pour attendre une opération KV avant de la traiter comme un miss de cache. Protège contre une lecture KV bloquée qui suspend la requête. Mettre à 0 pour désactiver. |
keyPrefix | string | "em" | Préfixe pour chaque clé de cache. Définissez une valeur unique lorsque plusieurs sites partagent un namespace. |
Node.js (mémoire)
L’adaptateur mémoire met en cache au sein du processus serveur. Il ne nécessite aucun service externe :
import emdash, { memoryCache } from "emdash/astro";
import { sqlite } from "emdash/db";
export default defineConfig({
integrations: [
emdash({
database: sqlite({ url: "file:./data.db" }),
objectCache: memoryCache(),
}),
],
});
Options
| Option | Type | Défaut | Description |
|---|---|---|---|
defaultTtl | number | 3600 | Durée de vie des entrées en cache, en secondes. |
revalidate | number | 1000 | Fenêtre de réutilisation d’époque locale à l’isolate, en ms. |
maxEntries | number | 1000 | Nombre maximum de clés en cache avant d’évincer les plus anciennes. |
keyPrefix | string | "em" | Préfixe pour chaque clé de cache. |
Ce qui est mis en cache
Le cache d’objets couvre les lectures qui s’exécutent lors d’un rendu de page typique :
- Requêtes de contenu :
getEmDashCollection,getEmDashEntryetresolveEmDashPath. - Paramètres du site, menus de navigation et termes de taxonomie.
Les requêtes de l’API admin, les fichiers médias et les réponses HTML complètes ne sont pas gérés ici. Pour mettre en cache le HTML rendu en périphérie, voir Déployer sur Cloudflare.
Fraîcheur
La modification de contenu via le panneau d’administration ou l’API REST invalide automatiquement les entrées de cache affectées. La création, mise à jour, publication ou suppression d’une entrée efface les requêtes en cache pour sa collection ; la modification d’une signature ou d’un terme de taxonomie efface les entrées qui l’affichent.
Pour les visiteurs anonymes, un changement met un certain temps à apparaître dans tous les isolates à mesure qu’ils récupèrent l’époque mise à jour. Avec le backend mémoire intra-isolate, c’est immédiat. Avec Workers KV, c’est limité par la propagation du cache edge de KV (consistance à terme, jusqu’à ~60 secondes) plus la fenêtre revalidate locale à l’isolate (par défaut une seconde). Diminuez revalidate pour une propagation locale plus rapide au prix de plus de lectures sur le cache ; augmentez-le pour lire le cache moins souvent.
Contenu programmé
Les entrées programmées deviennent visibles lorsque leur heure de publication est passée. Une page en cache reflète une entrée programmée nouvellement publiée lors du prochain changement dans sa collection, ou lorsque le defaultTtl de l’entrée en cache expire. Si la publication programmée précise est importante pour votre site, définissez un defaultTtl plus bas.