Shopify: replacing Redis with MySQL SKIP LOCKED for inventory reservations
Published 7 October 2026
Shopify replaced Redis with MySQL for their inventory reservation system, and it scaled.
The old way. Most reservation systems use Redis to quickly count and lock items in a cart, with MySQL as the final source of truth. At millions of transactions per minute, keeping the two in sync created lag and consistency issues.
The new way. Move everything into MySQL using SKIP LOCKED (available since
MySQL 8.0.1).
The schema change. Instead of one row per item with a quantity column
(item_id: 1, quantity: 10), use one row per individual unit โ 10 rows for 10 units.
How it works. Reserving an item locks one specific unit row. With SKIP LOCKED, other
requests skip the locked row and take the next available one, so transactions don't queue
up waiting on each other.
With a single source of truth, Redis is no longer needed for this use case.