Redis is usually fast state, not the source of truth
Use Redis-style tools for counters, queues, sessions, rate limits, locks, and hot cache. Keep critical durable records in a database unless you intentionally design Redis as the system of record.
NoSQL and cache services are not interchangeable. A free Redis, edge KV, or TTL cache can make an app faster and cheaper, but it can also create consistency bugs if you treat it like a durable SQL database. This page focuses on what each service is safe to store, cache, or coordinate.
Use Upstash for serverless Redis and rate limits.
Use Cloudflare KV for global read-heavy config and metadata.
Use Momento for short-lived cache, not permanent records.
Use Redis-style tools for counters, queues, sessions, rate limits, locks, and hot cache. Keep critical durable records in a database unless you intentionally design Redis as the system of record.
KV is great for feature flags, public config, cached API responses, redirects, and metadata. It is less suitable for strongly consistent writes.
A cache should be rebuildable. If deleting the value breaks the product or loses user data, it is not a cache; it is a database wearing the wrong name.
Document DB, key-value storage, cache, queue-like Redis, and edge config stores solve different problems. The free tier comparison only makes sense after you know the access pattern.
Choose based on consistency, connection model, TTL, command volume, and whether the value must survive deletion.
Best when you need Redis-like commands from serverless or edge runtimes without managing TCP connection pools.
Best for feature flags, redirects, cached API responses, public config, and edge metadata where eventual consistency is acceptable.
Best when data is temporary by design and TTL-bound caching is exactly what you want.
Best when you need native Redis semantics and tooling, but the small sandbox and TCP connection cap are acceptable.
Use this table for quota scanning. Then check the consistency and persistence notes before using any cache-like service as application state.
| PROVIDER | FREE STORAGE | MONTHLY BANDWIDTH | SPECS / COMPUTE | CONNECTION LIMITS | KEY CONSTRAINTS | ACTION |
|---|---|---|---|---|---|---|
Upstash RedisSERVERLESS REDIS | 256 MB | 500k Commands + 200GB free traffic/mo | Native REST HTTP API, ideal for Cloudflare Workers / Vercel Edge | Connectionless REST API Execution Pool | Commands capped at 500k/mo; overflow triggers pay-as-you-go | Go to Site ↗ |
Cloudflare KVEDGE KEY-VALUE | 1 GB | 100k Reads / 1k Writes per Day | Zero egress fees, multi-tier replication inside global edge network | Infinite distributed concurrent read pipelines | Eventual consistency mechanism; updates take up to 60s global propagation | Go to Site ↗ |
Momento CacheGRPC FAAS CACHE | TTL Bound (Max 24h) | 50 GB Free Egress / mo | Max 100 RPS throughput rate limits, built via low-overhead gRPC | Highly scalable internal connection multiplexing | Hard 24-hour maximum item TTL; not suitable for persistent state storage | Go to Site ↗ |
Redis CloudREDIS LABS NATIVE | 30 MB Sandbox | Fixed storage metrics, unmetered bandwidth within cap | Official native enterprise Redis engine core | Strict hard lock at 30 max concurrent connections | TCP-only; lacks HTTP REST API making serverless direct calls prone to connection leaks | Go to Site ↗ |
Read-heavy config, write-heavy counters, temporary cache, distributed locks, sessions, queues, and documents all want different backing stores.
A globally fast store with eventual consistency is excellent for config and cache, but dangerous for balances, permissions, inventory, and one-time tokens.
Edge and serverless functions often dislike long-lived TCP pools. REST APIs, connectionless drivers, or provider-specific SDKs reduce connection leaks.
Caches are often small, but command count grows quickly with page views, bot traffic, retries, and background jobs.
If the app cannot reconstruct cached values from another source, the cache is actually a database. That changes your backup, consistency, and migration requirements.
Edge KV is not ideal for locks, counters, payments, permissions, or rapidly changing user state because writes may take time to propagate globally.
A native TCP Redis service can work well from a VM, but serverless concurrency can create too many connections unless pooling is handled carefully.
If a key has a TTL, design the app as if it can disappear at any time. That means fallbacks, recomputation, and graceful degradation.
Use Workers for edge logic and Upstash for rate limits, counters, queues, or session-like state without TCP pooling.
Use KV for global metadata and redirects, R2 for durable objects/files, and Workers to route requests between them.
Keep durable records in Postgres, cache expensive reads in Redis, and design cache misses as a normal path.
Use SQL when you need durable records, relational queries, migrations, and strong consistency.
Functions often use Redis or KV for rate limits, idempotency keys, queues, and cache.
Use object storage for durable files, backups, exports, and public assets instead of forcing them into cache.
Redis is a data structure server often used for cache, queues, counters, sessions, and locks. KV is a simpler key-value store, often optimized for edge reads. Cache is a usage pattern: data that can be deleted and rebuilt.
Only if you intentionally design it that way and understand durability, persistence, backup, and memory limits. For most apps, Redis should support a durable database rather than replace it.
Use it for read-heavy global data such as feature flags, redirects, public config, cached API responses, and metadata. Avoid it for strongly consistent writes and fast-changing user state.
Upstash is often easiest for serverless and edge runtimes because it provides an HTTP REST API and avoids long-lived TCP connection management.
Cache expensive reads, third-party API responses, generated pages, rate-limit counters, and public metadata. Do not cache private or security-sensitive data without a clear invalidation strategy.