DEV Community

Alex Spinov
Alex Spinov

Posted on

Upstash Has a Free Redis API — Serverless Key-Value Storage Over HTTP

Redis Over HTTP

Upstash gives you serverless Redis accessible via simple HTTP requests. No connection management, no drivers needed. Free tier: 10K commands/day.

HTTP API (No SDK Needed)

curl https://your-endpoint.upstash.io/set/mykey/myvalue \
  -H "Authorization: Bearer your_token"

curl https://your-endpoint.upstash.io/get/mykey \
  -H "Authorization: Bearer your_token"
Enter fullscreen mode Exit fullscreen mode

Python

import requests

URL = "https://your-endpoint.upstash.io"
TOKEN = "your_token"
HEADERS = {"Authorization": f"Bearer {TOKEN}"}

def redis_set(key, value, ex=None):
    cmd = f"/set/{key}/{value}"
    if ex: cmd += f"/ex/{ex}"
    return requests.get(f"{URL}{cmd}", headers=HEADERS).json()

def redis_get(key):
    return requests.get(f"{URL}/get/{key}", headers=HEADERS).json()["result"]

def redis_incr(key):
    return requests.get(f"{URL}/incr/{key}", headers=HEADERS).json()["result"]

# Usage
redis_set("visits", 0)
redis_incr("visits")
print(f"Visits: {redis_get(visits)}")
Enter fullscreen mode Exit fullscreen mode

JavaScript

import { Redis } from "@upstash/redis";

const redis = new Redis({ url: "https://your-endpoint.upstash.io", token: "your_token" });

await redis.set("user:1", { name: "John", role: "admin" });
const user = await redis.get("user:1");
console.log(user); // { name: "John", role: "admin" }
Enter fullscreen mode Exit fullscreen mode

Real Use Cases

  1. Rate limiting — count requests per IP per minute
  2. Session storage — store user sessions in Redis
  3. Caching — cache expensive API responses
  4. Leaderboards — sorted sets for rankings
  5. Pub/Sub — real-time notifications

Rate Limiter in 5 Lines

def is_rate_limited(ip, limit=100, window=60):
    key = f"rate:{ip}"
    count = redis_incr(key)
    if count == 1:
        requests.get(f"{URL}/expire/{key}/{window}", headers=HEADERS)
    return int(count) > limit
Enter fullscreen mode Exit fullscreen mode

Free Tier

  • 10K commands/day
  • 256MB storage
  • 1 database
  • Global replication

More | GitHub


More from me: 10 Dev Tools I Use Daily | 77 Scrapers on a Schedule | 150+ Free APIs

Top comments (0)