Cache degli oggetti

In questa pagina

EmDash legge i contenuti e la configurazione del sito dal database ad ogni richiesta. La cache degli oggetti memorizza quei risultati delle query in un archivio chiave/valore veloce, cosicché le richieste ripetute vengono servite dalla cache anziché dal database. Riduce il carico di lettura sul database — utile su Cloudflare, dove KV serve molte più richieste al secondo rispetto a D1.

La cache degli oggetti è opzionale e disabilitata per impostazione predefinita. Abilitala aggiungendo un adattatore objectCache all’integrazione emdash().

Panoramica

BackendIdeale perCondiviso tra isolate
KVCloudflare Workers
MemoryNode.js, sviluppo localeNo (per processo)

Su Cloudflare, le richieste sono servite da molti isolate di breve durata in diverse regioni. KV è condiviso da tutti, quindi un valore memorizzato nella cache da una richiesta è disponibile per la successiva, ovunque. Il backend di memoria memorizza all’interno di un singolo processo, adatto a un server Node.js di lunga durata.

Cloudflare KV

Configura l’adattatore KV e puntalo 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" }),
		}),
	],
});

Configurazione

Crea un namespace KV e aggiungi il binding alla tua configurazione Wrangler.

npx wrangler kv namespace create CACHE

Il comando stampa un id del namespace. Aggiungilo sotto il nome del binding usato in kvCache:

wrangler.jsonc

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

wrangler.toml

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

Opzioni

OpzioneTipoPredefinitoDescrizione
bindingstringNome del binding KV dalla configurazione Wrangler. Obbligatorio.
defaultTtlnumber3600Time-to-live per le voci nella cache, in secondi. KV impone un minimo di 60 secondi.
revalidatenumber1000Finestra di riutilizzo dell’epoca locale dell’isolate, in millisecondi. Vedi Freschezza.
timeoutnumber2000Tempo massimo in millisecondi di attesa per un’operazione KV prima di trattarla come cache miss. Protegge da una lettura KV bloccata che sospende la richiesta. Imposta a 0 per disabilitare.
keyPrefixstring"em"Prefisso per ogni chiave della cache. Imposta un valore unico quando più siti condividono un namespace.

Node.js (memoria)

L’adattatore di memoria memorizza nella cache all’interno del processo del server. Non necessita di alcun servizio esterno:

import emdash, { memoryCache } from "emdash/astro";
import { sqlite } from "emdash/db";

export default defineConfig({
	integrations: [
		emdash({
			database: sqlite({ url: "file:./data.db" }),
			objectCache: memoryCache(),
		}),
	],
});

Opzioni

OpzioneTipoPredefinitoDescrizione
defaultTtlnumber3600Time-to-live per le voci nella cache, in secondi.
revalidatenumber1000Finestra di riutilizzo dell’epoca locale dell’isolate, in ms.
maxEntriesnumber1000Numero massimo di chiavi nella cache prima che quelle più vecchie vengano espulse.
keyPrefixstring"em"Prefisso per ogni chiave della cache.

Cosa viene memorizzato nella cache

La cache degli oggetti copre le letture che vengono eseguite in un tipico rendering di pagina:

  • Query sui contenuti: getEmDashCollection, getEmDashEntry e resolveEmDashPath.
  • Impostazioni del sito, menu di navigazione e termini di tassonomia.

Le richieste dell’API admin, i file multimediali e le risposte HTML complete non sono gestite qui. Per memorizzare nella cache l’HTML renderizzato al bordo, vedi Distribuire su Cloudflare.

Freschezza

La modifica dei contenuti attraverso il pannello di amministrazione o l’API REST invalida automaticamente le voci della cache interessate. La creazione, aggiornamento, pubblicazione o eliminazione di una voce cancella le query memorizzate nella cache per la sua collezione; la modifica di una firma o di un termine di tassonomia cancella le voci che lo visualizzano.

Per i visitatori anonimi, una modifica impiega del tempo per apparire in tutti gli isolate man mano che raccolgono l’epoca aggiornata. Con il backend di memoria intra-isolate questo è immediato. Con Workers KV è limitato dalla propagazione della cache edge di KV (consistenza eventuale, fino a ~60 secondi) più la finestra revalidate locale all’isolate (predefinita un secondo). Abbassa revalidate per una propagazione locale più veloce a costo di più letture sulla cache; alzalo per leggere la cache meno spesso.

Contenuto programmato

Le voci programmate diventano visibili quando il loro orario di pubblicazione passa. Una pagina nella cache riflette una voce programmata appena pubblicata alla prossima modifica della sua collezione, o quando il defaultTtl della voce nella cache scade. Se la pubblicazione programmata precisa è importante per il tuo sito, imposta un defaultTtl più basso.