Comparison

Redis on a Free Tier: Redis Mini at $12 Versus Upstash's Free Plan, by the Numbers

SnapDeploy Team 2026-11-09 Updated 2026-11-09 7 min read
redisupstashcachingqueuesfree-tier

Most small apps need Redis for one of four jobs: sessions, rate limiting, a cache, or a queue. On a free container tier you have two honest ways to get one. Upstash gives you a serverless Redis with a real free plan and per-command pricing. SnapDeploy gives you a dedicated Redis 7 instance next to your containers for $12 a month. They are not the same product, and the right one depends on how many commands you send and what kind. Here is the arithmetic and the cases.

The two offers

Upstash Redis, free plan SnapDeploy Redis Mini
PriceFree; then pay-as-you-go at $0.20 per 100,000 commands$12/month flat
Included500,000 commands a month, 256 MB of data, 10 GB of bandwidthA dedicated instance: 0.25 vCPU, 512 MB, unlimited commands, persistent storage, daily backups
ModelServerless, multi-tenant, reachable over the Redis protocol and over HTTP (REST), globalStock Redis 7 running as its own container in the same region as your app
TrialThe free plan is the trial$1 DB Sprint Pack: 12 hours of the same Mini instance
ConnectionURL you paste into the container's environment variablesREDIS_URL injected into the container

The arithmetic

Count commands, not requests. A typical web request that reads a session, checks a rate limit and touches a cache sends four to eight Redis commands. So:

1,000 requests/day x 6 commands x 30 days =   180,000 commands/month  -> inside Upstash's free 500,000
5,000 requests/day x 6 commands x 30 days =   900,000 commands/month  -> about $0.80/month on Upstash
$12 on Upstash pay-as-you-go buys about 6,000,000 commands a month
                                              -> above roughly 33,000 requests/day, Redis Mini is cheaper

For a hobby app with hundreds of visitors a day, Upstash is free and stays free. For an app doing tens of thousands of requests a day, the flat $12 wins. In between, both are cheap and the decision is about the kind of work, not the price.

Where Upstash fits better

  • An app that is mostly idle. The free container sleeps after 15 minutes; an Upstash database is there when it wakes, at no cost in between. A dedicated Redis runs all month whether or not the app does.
  • Edge and serverless callers. The REST interface works from Cloudflare Workers, Vercel functions and anywhere a TCP connection is awkward.
  • Sessions, rate limits, small caches. Few commands per request, tiny values, nothing time-critical.

Where Redis Mini fits better

  • Queues. Job libraries such as BullMQ, Sidekiq or Celery with a Redis broker use blocking reads and send many commands per job, which is exactly what per-command pricing punishes. On a dedicated instance a queue costs nothing extra per job. For a proper broker, RabbitMQ Mini ($14/month) is also there.
  • Pub/sub and anything chatty. Real-time features, presence, counters updated on every event.
  • Data larger than 256 MB, or a cache hit rate that matters: a dedicated instance in the same region answers in well under a millisecond over the private connection string; a global serverless endpoint answers in a few milliseconds.
  • Persistence you control. Redis Mini keeps its data on persistent storage with daily backups, so a restart does not empty it.

Wiring either one

Both are a URL. Read it from the environment and let the client library handle reconnects, because on the free tier your container will sleep and wake and the first command after a wake reopens the connection:

// Node, ioredis
const Redis = require("ioredis");
const redis = new Redis(process.env.REDIS_URL, { maxRetriesPerRequest: 3, enableOfflineQueue: false });

# Python, redis-py
import os, redis
r = redis.from_url(os.environ["REDIS_URL"], socket_timeout=2, retry_on_timeout=True)

Upstash URLs use rediss:// (TLS) and both libraries handle that from the scheme. With a SnapDeploy Redis add-on the variable is injected into the container; with Upstash you paste it. Keep a short socket timeout: a cache that hangs for 30 seconds is worse than a cache miss.

Try before you pay

The $1 DB Sprint Pack provisions the same Redis Mini for 12 hours. That is enough to run a queue worker against it, watch memory in the dashboard, and know whether 512 MB holds your working set before committing to the month. Data is kept for 24 hours after the trial ends, and converting to the monthly plan keeps the same instance.

A note on "free Redis" in general

We do not offer a free Redis for the same reason we do not offer a free database: a dedicated instance runs around the clock whether or not your app does, and a cache that sleeps is a cache that is empty when you need it. Upstash solves that with a multi-tenant serverless engine, which is real engineering and a fair trade for per-command pricing. Use it when your numbers fit; use the dedicated instance when they do not.

Sizing: what fits in 512 MB, and in 256 MB

Redis keeps everything in memory, so the question is the size of your working set. A session is usually under a kilobyte; a cached rendered fragment a few kilobytes; a rate-limit counter a few bytes. Half a gigabyte holds hundreds of thousands of sessions or a large page cache with room to spare, and Upstash's 256 MB is enough for most hobby apps. What blows either up is caching whole API responses without an expiry: set a TTL on everything that can be recomputed, and check INFO memory (the used_memory_human line) once a week until you know the shape of your data.

Moving between the two later

Both speak the Redis protocol, so the application change is one environment variable. Data mostly does not need to move: a cache warms itself, rate-limit counters expire, and sessions expire or users sign in again. The one thing to drain first is a queue: stop enqueueing, let the workers empty it, switch the URL, start again. If you must copy keys, DUMP and RESTORE work across any two Redis endpoints, and redis-cli --rdb can pull a snapshot from a server that allows it.

Test locally first

docker run --rm -p 6379:6379 redis:7
REDIS_URL=redis://localhost:6379 npm start   # or python app.py

A local Redis 7 is the same engine as the Mini add-on. If the app works against it, the only differences in production are the URL and, on the free tier, the container waking up before the first command.

Numbers used: Upstash free plan and pay-as-you-go rates from upstash.com/pricing/redis as of September 2026; Redis Mini $12/month and RabbitMQ Mini $14/month from the add-on pricing page; the $1 DB Sprint Pack for 12 hours.

Ready to Deploy?

Deploy free. 10 deploys a day, 100 hours a month, no credit card.

Run this yourself: Get a dedicated NVIDIA T4 (16 GB) for a flat $499/mo or A10G (24 GB) for $999/mo — never shared, never spot, no hourly metering. See dedicated GPU hosting →

One-click Ollama, vLLM, ComfyUI, Whisper, PyTorch & more — or deploy your own GitHub repo or Docker image. Compare plans.

FIRST OF ITS KIND

Sprint Pack — ₹99 for 24 hours

The first managed container PaaS to offer a one-time 24-hour Always-On pass under $5. Unlimited deploys + Always-On for one Small (512 MB) container — including WebSockets & real-time apps. No subscription, no auto-renewal. Stack two for 48 hours.

Need a managed database too? DB Sprint Pack — ₹99 / 12h for Postgres, MySQL, MariaDB, Mongo, Redis, or RabbitMQ.

Tip: Need 24 hours of Always-On for a demo, weekend, or quick test — or WebSockets & real-time apps? Sprint Pack is ₹99 one-time — no subscription, no auto-renewal.

Need a managed Postgres / MySQL / Mongo / Redis instead? DB Sprint Pack — ₹99 / 12h.

Take SnapDeploy with you

Deploy, monitor and wake your containers from your iPhone.

Download on the App Store

Get DevOps Tips & Updates

Container deployment guides, platform updates, and DevOps best practices. No spam.

Unsubscribe anytime. We respect your privacy.

More Articles