Upstash Redis
A Redis counter example that stores a hash of function invocation count per region. Find the code on GitHub.
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.
1cp 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:
1supabase functions new upstash-redis-counter
And add the code to the index.ts
file:
12345678910111213141516171819202122232425262728293031323334import { 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) => { 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
12supabase startsupabase functions serve --no-verify-jwt --env-file supabase/functions/upstash-redis-counter/.env
Navigate to http://localhost:54321/functions/v1/upstash-redis-counter.
Deploy
12supabase functions deploy upstash-redis-counter --no-verify-jwtsupabase secrets set --env-file supabase/functions/upstash-redis-counter/.env