Rate limiting with Upstash Redis in Supabase Edge Functions
Redis is an open source (BSD licensed), in-memory data structure store used as a database, cache, message broker, and streaming engine. It is optimized for atomic operations like incrementing a value, for example for a view counter or rate limiting. We can even rate limit based on the user ID from Supabase Auth!
Upstash provides an HTTP/REST based Redis client which is ideal for serverless use-cases and therefore works well with Supabase Edge Functions.
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/.env.local.example supabase/.env.local
Run locally
Make sure you have the latest version of the Supabase CLI installed.
supabase start
supabase functions serve --env-file supabase/.env.local
Navigate to http://localhost:54321/functions/v1/upstash-redis-ratelimit.
Deploy
supabase functions deploy upstash-redis-ratelimit
supabase secrets set --env-file supabase/.env.local