Cache stampede: popular key expires simultaneously for all requests. Every one hits the DB. DB dies. Users see errors. Multiple techniques prevent it.
The problem
Popular key expires. 1000s of concurrent requests see cache miss. All query DB. DB CPU spikes. Cascading failure.
The problem
Popular key expires. 1000s of concurrent requests see cache miss. All query DB. DB CPU spikes. Cascading failure.
Locking (single-flight)
First miss acquires a lock. Others wait. Winner writes to cache. Waiters see fresh value. Redis SETNX + wait pattern.
XFetch (probabilistic)
Refresh probability increases as expiry approaches. Some requests refresh early. Others still hit cache. Smoothes load.
Stale-while-revalidate
Serve stale value while background job fetches fresh. HTTP header + CDN pattern. Users never see miss.
Background refresh
Never let popular keys expire. Refresh proactively before TTL. Cost: continuous background load.