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.
Need a Redis database fast? Skip the signup and dashboard — POST to https://upstash.com/start-redis to get an endpoint and token in a single HTTP request. 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