INTEGRITY Dokumentace

Ukládání dat do cache pomocí Workers KV

Workers KV lze použít jako trvalou, jednotnou a globální cache dostupnou z Cloudflare Workers ke zrychlení vaší aplikace. Data uložená v cache Workers KV jsou dostupná i ze všech ostatních lokalit Cloudflare a zůstávají zachována až do vypršení platnosti nebo smazání.

Po načtení dat z externích zdrojů ve vaší aplikaci Workers je můžete zapsat do Workers KV. Při dalších požadavcích na Worker, ve stejném regionu i v jiných regionech, pak můžete číst data z cache Workers KV místo volání externího API. Tím se zlepší výkon a odolnost vaší aplikace Workers a zároveň se sníží zátěž externích zdrojů.

Tento příklad ukazuje, jak lze v aplikaci Worker ukládat data do mezipaměti Workers KV a číst z ní data uložená v mezipaměti.

Ukládání dat do cache Workers KV z aplikace Worker

V následujícím index.ts soubor, Worker načte data z externího serveru a odpověď uloží do mezipaměti ve Workers KV. Pokud jsou data již uložena v mezipaměti ve Workers KV, Worker přečte data z mezipaměti Workers KV, místo aby volal externí API.

index.ts
interface Env {
  CACHE_KV: KVNamespace;
}

export default {
  async fetch(request, env, ctx): Promise<Response> {

     const EXPIRATION_TTL = 30; // Cache expiration in seconds
    const url = 'https://example.com';
    const cacheKey = "cache-json-example";

    // Try to get data from KV cache first
    let data = await env.CACHE_KV.get(cacheKey, { type: 'json' });
    let fromCache = true;

    // If data is not in cache, fetch it from example.com
    if (!data) {
      console.log('Cache miss. Fetching fresh data from example.com');
      fromCache = false;

    		// In this example, we are fetching HTML content but it can also be API responses or any other data
      const response = await fetch(url);
    		const htmlData = await response.text();

    		// In this example, we are converting HTML to JSON to demonstrate caching JSON data with Workers KV
    		// You could cache any type of data, or even cache the HTML data directly
    		data = helperConvertToJSON(htmlData);
    		// The expirationTtl option is used to set the expiration time for the cache entry (in seconds), otherwise it will be stored indefinitely
    		await env.CACHE_KV.put(cacheKey, JSON.stringify(data), { expirationTtl: EXPIRATION_TTL });
    }

    // Return the appropriate response format
    	return new Response(JSON.stringify({
    		data,
    		fromCache
    	}), {
    		headers: { 'Content-Type': 'application/json' }
    	});

}
} satisfies ExportedHandler<Env>;

// Helper function to convert HTML to JSON
function helperConvertToJSON(html: string) {
// Parse HTML and extract relevant data
const title = helperExtractTitle(html);
const content = helperExtractContent(html);
const lastUpdated = new Date().toISOString();

    return { title, content, lastUpdated };

}

// Helper function to extract title from HTML
function helperExtractTitle(html: string) {
const titleMatch = html.match(/<title>(.\*?)<\/title>/i);
return titleMatch ? titleMatch[1] : 'No title found';
}

// Helper function to extract content from HTML
function helperExtractContent(html: string) {
const bodyMatch = html.match(/<body>(.\*?)<\/body>/is);
if (!bodyMatch) return 'No content found';

    // Strip HTML tags for a simple text representation
    const textContent = bodyMatch[1].replace(/<[^>]*>/g, ' ')
    	.replace(/\s+/g, ' ')
    	.trim();

    return textContent;

}
{
	"$schema": "node_modules/wrangler/config-schema.json",
	"name": "<ENTER_WORKER_NAME>",
	"main": "src/index.ts",
	"compatibility_date": "2025-03-03",
	"observability": {
		"enabled": true
	},
	"kv_namespaces": [
		{
			"binding": "CACHE_KV",
			"id": "<YOUR_BINDING_ID>"
		}
	]
}

Tento úryvek kódu ukazuje, jak číst a aktualizovat data uložená v mezipaměti Workers KV z vašeho Workeru. Pokud data nejsou v mezipaměti Workers KV, Worker je načte z externího serveru a uloží je do mezipaměti Workers KV.

V tomto příkladu převádíme HTML do JSON, abychom ukázali, jak lze pomocí Workers KV uložit do mezipaměti data ve formátu JSON, ale do Workers KV lze uložit libovolný typ dat. Můžete si tak do mezipaměti uložit například odpovědi API, obsah HTML nebo jakákoli jiná data, která chcete zachovat mezi jednotlivými požadavky.