Redis vs MySQL at scale: why Shopify moved inventory to MySQL

Published 2026-10-19 · Built only from first-party engineering write-ups in our database. Every number below comes from the linked source.

Shopify's 2026 post is the direct comparison: it moved checkout inventory reservations from Redis to MySQL, using one row per sellable unit, a bounded pool of 1,000 rows per item and location, and SELECT ... FOR UPDATE SKIP LOCKED. The real ceiling turned out to be connections held by other checkout code. Elsewhere Redis plays supporting roles: Stripe's rate limiters and Stack Overflow's caching.

Redis vs MySQL: side by side

RedisMySQL
Stories in our database310
CompaniesShopify, Stack Overflow and StripeCanva, GitHub, Meta, PlanetScale, Shopify and Slack
Published2016–20262013–2026
Techniques alongside itcaching (1), connection pooling (1), database migration (1), dual writes (1)database migration (3), horizontal sharding (3), caching (2), online migration (2)
Scale numbers stated in sources$5.1 million sales/minute (Black Friday 2025 peak) (Shopify)hundreds of millions of users (Canva); $5.1 million sales/minute (Black Friday 2025 peak) (Shopify); 5.5 million QPS (GitHub)
Direct comparison storyShopify: We replaced Redis with MySQL for inventory reservations—and it scaled(same story)

Verdict

Redis keeps showing up for caching and rate limiting. Shopify's post shows a relational database can also take a hot, contended workload when the schema and locking are designed for it.

Counts are stories in How They Scaled tagged with each side, see the Redis and MySQL pages. They describe what these teams wrote about, not market share or benchmark results.

The direct comparison

Redis in other scaling stories

MySQL in other scaling stories

Canva · 2026

Session revocations at scale

Canva keeps 12 hours of session revocations in memory on every gateway, but hundreds of pods each loading over a million revocations from MySQL on deploy caused a stampede on the database. A worker now packs revocations into sorted 16-byte records in 30-minute chunks on S3, using conditional PUTs for optimistic concurrency and ZooKeeper leader election to avoid conflicts, and reaches over 2,000 revocations per second. Gateways binary-search the downloaded bytes directly and poll with conditional GETs, which shrank the cache by 87.5% and cut the revocation database down to two read replicas kept for redundancy.

hundreds of millions of usershundreds of thousands of session checks/seccachingobject storageoptimistic concurrency controlMySQLAmazon S3ZooKeeper
Shopify · 2024

Horizontally scaling the Rails backend of Shop app with Vitess

Shopify's Shop app adopted Vitess to shard its Rails backend, covering keyspace design and the migration plan.

horizontal shardingdatabase migrationMySQLVitessRuby on Rails
GitHub · 2023

Upgrading GitHub.com to MySQL 8.0

How GitHub upgraded its whole MySQL fleet to 8.0 with staged replicas and a working rollback path.

5.5 million QPS300+ TBfleet upgradereplicationrollback planningMySQL
PlanetScale · 2022

One million queries per second with MySQL

PlanetScale benchmarked a horizontally sharded Vitess cluster up to one million QPS.

1 million QPShorizontal shardingbenchmarkingMySQLVitess
GitHub · 2021

Partitioning GitHub's relational databases to handle scale

GitHub defined schema domains and linted cross-domain queries so it could move table groups onto separate MySQL clusters.

vertical partitioningschema domainsonline migrationMySQLRuby on RailsVitess
Shopify · 2021

Shard Balancing: Moving Shops Confidently with Zero-Downtime at Terabyte-scale

Shopify rebalances MySQL shards by moving individual shops online with its Ghostferry tool.

terabyte scaleshard rebalancingonline migrationzero downtimeMySQLGhostferry
Shopify · 2021

Read Consistency with Database Replicas

Shopify routes reads to MySQL replicas while giving apps consistency guarantees such as monotonic reads.

read replicasconsistencyMySQL
Slack · 2020

Scaling Datastores at Slack with Vitess

Slack's multi-year migration from active-active MySQL pairs to Vitess, so data could be sharded by any key, not only workspace.

2.3 million QPShorizontal shardingdatabase migrationMySQLVitess
Meta · 2013

TAO: The power of the graph

TAO is Facebook's geo-distributed graph cache over sharded MySQL, serving the social graph at more than a billion reads per second.

over 1 billion reads/secmillions of writes/seccachinggeo-distributiongraph data modelMySQLMemcache

FAQ

Why did Shopify replace Redis with MySQL?

Shopify's post explains how it moved inventory reservations to MySQL with one row per sellable unit and SKIP LOCKED, and reports that the cleanup removed 50% of reads and 33% of transactions on the primary. The post cites a Black Friday 2025 peak of $5.1 million in sales per minute.

What is Redis used for at scale?

In our database: Stripe's API rate limiters and load shedders, and caching at Stack Overflow.

The best scaling write-ups, weekly

One email a week. No spam.

Subscribe

More comparisons

All comparisons →