Upstash Redis vs Cloudflare KV vs AWS DynamoDB: Real Key-Value Storage Cost per 100 Million Operations in 2026
The short answer: Upstash's flat per-command rate — the same price whether a command reads or writes — makes it the only one of these three whose cost doesn't change at all between a read-heavy and a write-heavy workload, which flips its relative ranking entirely depending on the read/write mix. At 100 million operations split 95% reads / 5% writes (a typical cache pattern), AWS DynamoDB On-Demand is cheapest by a wide margin at about $15, Cloudflare KV comes to about $67.50 (including its $5/month Workers Paid base fee and its 10-million-read/1-million-write included allowance), and Upstash costs $200 regardless. At a balanced 50/50 read/write split, the ranking compresses dramatically: DynamoDB rises to $37.50, Upstash stays flat at $200, but Cloudflare KV jumps to $270 — now the most expensive of the three — because KV's write rate is ten times its read rate, and a workload with meaningfully more writes hits that penalty hard. The exact crossover between Upstash and KV, once KV's base fee and included allowances are properly accounted for, falls at roughly 65.6% reads / 34.4% writes, not the rounder 70/30 split a simpler calculation might suggest.
The billing-unit mismatch, up front
Upstash Redis bills every command — read or write — at the identical rate, $0.20 per 100,000 commands on pay-as-you-go, with no distinction between a GET and a SET. Cloudflare KV bills reads and writes at genuinely different rates on top of a flat platform fee, with writes priced ten times higher per operation than reads ($5.00 per million writes versus $0.50 per million reads), plus the $5/month Workers Paid subscription required to access paid KV usage at all — a structural reflection of KV's eventually-consistent, read-optimized architecture, built for edge workloads that read far more than they write. AWS DynamoDB bills Read Request Units and Write Request Units separately, with writes priced five times higher than reads ($0.625 per million WRU versus $0.125 per million RRU on-demand) — a narrower read/write gap than KV's, but still a real one, and one that also depends on item size and consistency mode in ways the other two don't replicate.
What each vendor bills
Upstash Redis (OFFICIAL, upstash.com/pricing, checked July 2026). Pay-as-you-go: $0.20 per 100,000 commands, with no per-command-type distinction. Free: 256 MB, 500,000 commands/month. Fixed plans (unlimited commands, flat monthly fee): $10 to $1,500/month, scaling by data size (250 MB to 500 GB) and bandwidth allowance, with an additional $5–$750/month per extra read region on the Fixed tiers for global replication. A documented "command amplification" risk: features like sliding-window rate limiting can fire 3 to 5 Redis commands per single logical check, and pipelining multiple commands together saves latency, not command count — Upstash bills each command inside a pipeline individually, so batching doesn't reduce the metered total the way it might on other platforms.
Cloudflare KV (OFFICIAL, developers.cloudflare.com pricing). Requires the Workers Paid plan: $5/month, which includes 10 million reads and 1 million writes/deletes/lists a month before per-operation billing begins. Beyond that included allowance: Read operations: $0.50 per million. Write, delete, and list operations: $5.00 per million — ten times the read rate. Free tier (no Workers Paid subscription): 100,000 reads/day, 1,000 writes/day, with no path to higher paid usage without upgrading to Workers Paid first. KV is explicitly architected for read-heavy, globally-distributed edge workloads with eventual consistency; it is "a poor choice for anything write-heavy or requiring read-your-writes consistency," per independent analysis, a design constraint as much as a pricing one.
AWS DynamoDB (OFFICIAL, AWS DynamoDB pricing documentation, September 2026). On-Demand: $0.625 per million Write Request Units, $0.125 per million Read Request Units — no capacity planning required, pay only for actual usage. Provisioned: $0.00065 per WCU-hour (~$0.47/WCU-month), $0.00013 per RCU-hour (~$0.09/RCU-month), billed hourly for reserved capacity whether used or not, but at a rate that becomes dramatically cheaper than On-Demand once utilization is steady and reasonably well-forecast; Auto Scaling can adjust provisioned capacity automatically to reduce manual tuning. One RRU covers one strongly-consistent read of up to 4 KB (or two eventually-consistent reads of the same size); one WRU covers one write of up to 1 KB — meaning larger items consume proportionally more request units per operation, a mechanic neither Upstash's nor KV's flat per-operation pricing replicates.
Two workload shapes, both at an illustrative 1 KB average item size
Shape A: read-heavy cache, 95% reads / 5% writes. Shape B: balanced workload, 50% reads / 50% writes. Both at 100 million total operations/month and an ILLUSTRATIVE 1 KB average item size, chosen to keep DynamoDB's request-unit consumption at a clean 1:1 ratio with "operations" for comparability (larger items would consume more RCU/WCU per operation and raise DynamoDB's relative cost correspondingly).
Cost per 100 million operations, by workload shape
Formula: Upstash = total operations ÷ 100,000 × $0.20, independent of read/write mix; Cloudflare KV = $5 base + (max(0, reads − 10M) ÷ 1M × $0.50) + (max(0, writes − 1M) ÷ 1M × $5.00); DynamoDB On-Demand = (reads ÷ 1M × $0.125) + (writes ÷ 1M × $0.625).
| Platform | Shape A: 95% reads / 5% writes | Shape B: 50% reads / 50% writes |
|---|---|---|
| AWS DynamoDB, On-Demand | $15.00 | $37.50 |
| Cloudflare KV (including $5 base + included allowance) | $67.50 | $270.00 |
| Upstash Redis, pay-as-you-go | $200.00 | $200.00 (unchanged) |
A separate, marginal-only view is worth noting for a team already paying the $5/month Workers Paid subscription for unrelated reasons (running other Workers code, say): in that case, KV's incremental cost for this workload is the same $62.50 (Shape A) or $265.00 (Shape B) usage total, without re-adding the $5 base, since it's already sunk into the existing subscription.
DynamoDB wins both shapes outright, by a wide margin, because its on-demand rates are simply lower per-unit than either competitor's at this item size — a genuine structural advantage, not an artifact of this article's specific read/write split. The more interesting result is the reversal between Upstash and Cloudflare KV: Upstash is far more expensive at the read-heavy shape (where KV's cheap read rate, plus its included allowance, shine) but becomes the cheaper of the two at the balanced shape, because KV's steep 10x write penalty eventually outweighs Upstash's flat, mix-independent rate.
Where the crossover between Upstash and Cloudflare KV actually sits
Formula: KV cost = Upstash cost when $5 + (max(0, reads − 10M) ÷ 1M × $0.50) + (max(0, writes − 1M) ÷ 1M × $5.00) = total operations ÷ 100,000 × $0.20, with reads + writes = 100,000,000. Solving this precisely (verified programmatically, accounting for KV's $5 base fee and its 10-million-read/1-million-write included allowance): the crossover falls at writes ≈ 34.4% of total operations, reads ≈ 65.6% — a steeper threshold than a naive calculation ignoring the base fee and allowances would suggest (which lands closer to 70/30). Below roughly 34.4% writes, KV is cheaper than Upstash; above it, Upstash's flat rate wins. A workload's actual write share relative to this threshold is the single most consequential variable for choosing between these two specifically, more so than raw operation volume.
Why DynamoDB's request-unit model rewards predictable traffic
Formula: Provisioned cost per unit ≈ On-Demand rate ÷ roughly 5–8x, at the per-unit rates given above, once utilization is reasonably steady. A workload with predictable, sustained traffic can switch from On-Demand to Provisioned capacity (ideally paired with Auto Scaling to absorb variability) and cut its effective DynamoDB cost substantially below even this article's already-competitive On-Demand figures — an option neither Upstash's nor Cloudflare KV's pricing structure offers in comparable form, since neither separates a "reserved capacity" discount tier from its standard per-operation rate.
Sensitivity
- Read/write mix. The single largest lever in this entire comparison; it is what flips Upstash and Cloudflare KV's relative ranking entirely, while barely affecting DynamoDB's already-low cost at either shape.
- Item size, for DynamoDB specifically. Larger items consume more request units per operation (one WRU per 1 KB written, one RRU per 4 KB read under strong consistency), directly scaling DynamoDB's cost upward for larger payloads in a way Upstash's and KV's flat per-operation rates do not replicate.
- Consistency mode on DynamoDB. Eventually-consistent reads cost half of strongly-consistent reads per the same data volume, a real lever unavailable on Upstash or KV.
- Command amplification, on Upstash specifically. Features like rate-limiting patterns that fire multiple Redis commands per logical check can multiply the real command count well beyond what a naive "operations" estimate would suggest.
Budgeting traps
- Assuming Upstash's flat per-command rate is always either the cheapest or the most expensive option. Its ranking relative to Cloudflare KV flips entirely depending on read/write mix, crossing over at roughly 65.6% reads / 34.4% writes once KV's base fee and included allowance are properly accounted for.
- Treating Cloudflare KV as a general-purpose key-value store without accounting for its 10x write penalty. A workload with meaningfully more than roughly 34% writes can make KV the most expensive of all three options.
- Forgetting Cloudflare KV requires the $5/month Workers Paid subscription before any paid usage applies. The free tier (100,000 reads/day, 1,000 writes/day) has no path to higher volume without upgrading first.
- Pricing DynamoDB from a naive "per operation" assumption without accounting for item size and consistency mode. Both directly scale actual request-unit consumption beyond a simple 1:1 operations mapping.
- Ignoring Upstash's command amplification from pipelining or rate-limiting patterns. Pipelining saves latency, not command count, and certain common patterns can fire several billable commands per logical application action.
What to ask before you buy
Calculate your actual read/write split precisely before choosing between Upstash and Cloudflare KV specifically, since the cheaper option crosses over at roughly a 65.6%/34.4% read/write ratio once KV's base fee and allowances are included — a workload close to that threshold deserves a direct calculation rather than an assumption. If evaluating DynamoDB for a steady, predictable workload, model Provisioned capacity with Auto Scaling against the On-Demand figures in this article, since the provisioned rate can be substantially cheaper once utilization is well-forecast.