This guide shows you how to interact with KV Store from your functions to store, retrieve, and delete key-value data.
Go to KV Store referenceRequirements
Before you begin, make sure you have:
- Functions enabled in your application.
- A KV Store namespace created via Console or API.
Creating a function to interact with KV Store
Follow these steps to create a function that communicates with KV Store:
- Access Azion Console.
- On the upper-left corner, select Functions.
- Click + Function.
- Enter a name for your function, for example:
kv-store-handler. - Delete the placeholder code in the editor.
- Paste one of the code examples below based on your use case.
Storing data
This example demonstrates how to store different types of data in KV Store:
async function handleRequest(request) { const kv = new Azion.KV();
// Store a simple string await kv.put("greeting", "Hello, World!");
// Store a JSON object await kv.put("user-preferences", { theme: "dark", language: "en", notifications: true });
// Store with metadata and expiration await kv.put("session-token", "abc123xyz", { metadata: { userId: "user-42" }, expirationTtl: 3600 // expires in 1 hour });
return new Response("Data stored successfully", { headers: { "Content-Type": "text/plain" }, status: 200 });}
addEventListener("fetch", (event) => { event.respondWith(handleRequest(event.request));});Retrieving data
This example shows how to retrieve data in different formats:
async function handleRequest(request) { const kv = new Azion.KV();
// Get as text (default) const greeting = await kv.get("greeting", "text");
// Get as JSON object const preferences = await kv.get("user-preferences", "json");
// Handle missing keys const missing = await kv.get("non-existent-key", "text"); if (missing === null) { console.log("Key not found"); }
const response = { greeting, preferences, keyExists: missing !== null };
return new Response(JSON.stringify(response), { headers: { "Content-Type": "application/json" }, status: 200 });}
addEventListener("fetch", (event) => { event.respondWith(handleRequest(event.request));});Retrieving multiple keys
Fetch multiple values in a single operation:
async function handleRequest(request) { const kv = new Azion.KV();
// Store some test data await kv.put("user-1", "Alice"); await kv.put("user-2", "Bob"); await kv.put("user-3", "Charlie");
// Retrieve multiple keys at once const keys = ["user-1", "user-2", "user-3", "user-4"]; const users = await kv.get(keys, "text");
// Result: { "user-1": "Alice", "user-2": "Bob", "user-3": "Charlie", "user-4": null }
return new Response(JSON.stringify(users), { headers: { "Content-Type": "application/json" }, status: 200 });}
addEventListener("fetch", (event) => { event.respondWith(handleRequest(event.request));});Retrieving data with metadata
Use getWithMetadata to retrieve both the value and its associated metadata:
async function handleRequest(request) { const kv = new Azion.KV();
// Store data with metadata await kv.put("session", "active-session-data", { metadata: { createdAt: new Date().toISOString(), userId: "user-42" } });
// Retrieve with metadata const result = await kv.getWithMetadata("session", "text");
console.log(`Value: ${result.value}`); console.log(`Metadata: ${JSON.stringify(result.metadata)}`);
return new Response(JSON.stringify(result), { headers: { "Content-Type": "application/json" }, status: 200 });}
addEventListener("fetch", (event) => { event.respondWith(handleRequest(event.request));});Deleting data
Remove a key from the store:
async function handleRequest(request) { const kv = new Azion.KV();
const key = "session-token";
// Delete the key await kv.delete(key);
return new Response(`Key '${key}' deleted`, { headers: { "Content-Type": "text/plain" }, status: 200 });}
addEventListener("fetch", (event) => { event.respondWith(handleRequest(event.request));});Working with binary data
Store and retrieve binary data using ArrayBuffer:
async function handleRequest(request) { const kv = new Azion.KV();
// Store binary data const encoder = new TextEncoder(); const binaryData = encoder.encode("Binary content here").buffer; await kv.put("binary-key", binaryData);
// Retrieve as ArrayBuffer const retrieved = await kv.get("binary-key", "arrayBuffer");
// Decode back to string const decoder = new TextDecoder("utf-8"); const decodedString = decoder.decode(retrieved);
return new Response(decodedString, { headers: { "Content-Type": "text/plain" }, status: 200 });}
addEventListener("fetch", (event) => { event.respondWith(handleRequest(event.request));});Working with streams
For large data, use ReadableStream for efficient memory usage:
async function handleRequest(request) { const kv = new Azion.KV(); const key = "large-content";
// Retrieve as stream const stream = await kv.get(key, "stream");
if (stream === null) { return new Response("Key not found", { status: 404 }); }
// Return the stream directly in the response return new Response(stream, { headers: { "Content-Type": "application/octet-stream" }, status: 200 });}
addEventListener("fetch", (event) => { event.respondWith(handleRequest(event.request));});Using specific namespaces
Work with different namespaces for data isolation:
async function handleRequest(request) { // Use a specific namespace const productionKV = new Azion.KV("production-data"); const stagingKV = new Azion.KV("staging-data");
// Or use the open method const cacheKV = await Azion.KV.open("cache-namespace");
// Each namespace is isolated await productionKV.put("config", "production-value"); await stagingKV.put("config", "staging-value");
const prodConfig = await productionKV.get("config", "text"); const stagingConfig = await stagingKV.get("config", "text");
return new Response(JSON.stringify({ production: prodConfig, staging: stagingConfig }), { headers: { "Content-Type": "application/json" }, status: 200 });}
addEventListener("fetch", (event) => { event.respondWith(handleRequest(event.request));});Instantiating the function
After creating your function, you need to instantiate it in your application:
Go to how to instantiate functions in your application