Shopify moved checkout inventory reservations off Redis and into the same MySQL database that already held the inventory ledger, then proved it at Black Friday 2025 peak: $5.1 million in sales per minute with the database writer under 50% CPU. The move was not about speed. Redis could not express multi-location stock or make reserve-and-claim atomic, and the fix was one MySQL row per sellable unit claimed with SKIP LOCKED.
Read the full story: Shopify swapped Redis for MySQL and hit $5.1M sales a minute →
Transcript
Shopify moved checkout inventory reservations off Redis and into MySQL, and it was not about speed. The old design kept one counter per item and moved it with incr and decr. Fast, and blind in two ways. A single number cannot say which warehouse the stock is sitting in. And the reservation lived in Redis while the ledger lived in MySQL, with no transaction covering both. Every gap between those two writes is a chance to oversell, or to quietly hold back stock somebody would have bought. The fix was one database row per sellable unit, capped at a thousand, claimed with SKIP LOCKED so shoppers stop queueing behind the same key. Black Friday peak: five point one million dollars a minute, writer CPU under fifty percent. If your consistency requirement crosses two systems, no amount of speed on either side will save you.