Upstash Redis
A Redis counter example that stores a hash of function invocation count per region. Find the code on GitHub .
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
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 { Redis } from 'https://deno.land/x/upstash_redis@v1.19.3/mod.ts'
console. log ( `Function "upstash-redis-counter" up and running!` )
Deno. serve ( async ( _req ) => {
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' )
// Increment region counter
await redis. hincrby ( 'supa-edge-counter' , deno_region, 1 )
// Increment localhost counter
await redis. hincrby ( 'supa-edge-counter' , 'localhost' , 1 )
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 } }), {
return new Response ( JSON . stringify ({ counters }), { status: 200 })
return new Response ( JSON . stringify ({ error: error.message }), { status: 200 })
supabase functions serve --no-verify-jwt --env-file supabase/functions/upstash-redis-counter/.env
Navigate to http://localhost:54321/functions/v1/upstash-redis-counter .
supabase functions deploy upstash-redis-counter --no-verify-jwt
supabase secrets set --env-file supabase/functions/upstash-redis-counter/.env