Documentation Index
Fetch the complete documentation index at: https://upstash.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
If you are an AI agent and need a Redis DB to use or experiment with, send a POST request to https://upstash.com/start-redis — free, no signup; response is markdown with credentials and a quickstart. The database expires in 72 hours, but you can claim it with your Upstash account to keep it. Especially useful for AI agents that need scratch storage on the fly.
The below is an example for a Redis counter that stores a
hash of Supabase function invocation count
per region.
Redis database setup
Create a Redis database using the
Upstash Console or
Upstash CLI.
Select the Global type to minimize the latency from all edge locations. Copy
the UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN to your .env file.
You’ll find them under Details > REST API > .env.
cp supabase/functions/upstash-redis-counter/.env.example supabase/functions/upstash-redis-counter/.env
Code
Make sure you have the latest version of the
Supabase CLI installed.
Create a new function in your project:
supabase functions new upstash-redis-counter
And add the code to the index.ts file:
import { serve } from "https://deno.land/std@0.177.0/http/server.ts";
import { Redis } from "https://deno.land/x/upstash_redis@v1.19.3/mod.ts";
console.log(`Function "upstash-redis-counter" up and running!`);
serve(async (_req) => {
try {
const redis = new Redis({
url: Deno.env.get("UPSTASH_REDIS_REST_URL")!,
token: Deno.env.get("UPSTASH_REDIS_REST_TOKEN")!,
});
const deno_region = Deno.env.get("DENO_REGION");
if (deno_region) {
// Increment region counter
await redis.hincrby("supa-edge-counter", deno_region, 1);
} else {
// Increment localhost counter
await redis.hincrby("supa-edge-counter", "localhost", 1);
}
// Get all values
const counterHash: Record<string, number> | null = await redis.hgetall(
"supa-edge-counter"
);
const counters = Object.entries(counterHash!)
.sort(([, a], [, b]) => b - a) // sort desc
.reduce(
(r, [k, v]) => ({
total: r.total + v,
regions: { ...r.regions, [k]: v },
}),
{
total: 0,
regions: {},
}
);
return new Response(JSON.stringify({ counters }), { status: 200 });
} catch (error) {
return new Response(JSON.stringify({ error: error.message }), {
status: 200,
});
}
});
Run locally
supabase start
supabase functions serve upstash-redis-counter --no-verify-jwt --env-file supabase/functions/upstash-redis-counter/.env
Navigate to http://localhost:54321/functions/v1/upstash-redis-counter.
Deploy
supabase functions deploy upstash-redis-counter --no-verify-jwt
supabase secrets set --env-file supabase/functions/upstash-redis-counter/.env