Förhindra cache-stampeder och thundering herds
Lär Er vad en cache-stampede är, varför den överbelastar databasen när en populär nyckel löper ut och vilka låsnings- och uppdateringstekniker som håller backend säker under belastning.
Förhindra cache-stampeder och thundering herds är en gratis lektion i Redis: cachelagring och meddelanden (Pub/Sub, Streams) på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Redis: cachelagring och meddelanden (Pub/Sub, Streams), och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Redis: cachelagring och meddelanden (Pub/Sub, Streams) innehåller totalt 4 lektioner.
Vad är en cache-stampede?
En cache-stampede (eller thundering herd) uppstår när en populär cachad nyckel löper ut och många begäranden missar cachen samtidigt. Alla rusar då till databasen för att återskapa värdet, vilket överbelastar den.
Varför det är så farligt
Vid hög trafik kan hundratals eller tusentals samtidiga cachemissar nå databasen inom millisekunder. Backend-systemet, som normalt inte belastas alls av den nyckeln, får plötsligt ta emot hela trafikflödet, vilket orsakar kraftigt ökad fördröjning eller driftstopp.
Det naiva cache-aside-flödet
Det grundläggande mönstret läser från cachen och frågar databasen vid en miss, för att sedan lagra resultatet. Varje samtidig miss kör denna databasfråga – det är sårbarheten.
Lösning 1: Ett lås för omberäkning
Låt endast den första begäran som saknar värdet återskapa det, medan övriga väntar eller använder föråldrade data. Redis SET NX ger exakt en klient ett kortvarigt lås.
SET lock:product:42 "1" NX EX 10Så fungerar låsflödet
Vid en miss:
- Försök hämta låset med
SET NX - Om Ni fick låset frågar Ni databasen och fyller på cachen
- Om inte väntar Ni kort och läser cachen igen
Endast en databasfråga körs per utgång.
Lösning 2: Stale-while-revalidate
Lagra värdet med en logisk utgångstid som infaller tidigare än den fysiska TTL:en. När den logiska tiden har passerat returnerar Ni det föråldrade värdet direkt och uppdaterar det i bakgrunden, så att användarna aldrig behöver vänta vid en miss.
Lösning 3: Tidig probabilistisk utgång
Vid varje begäran uppdateras nyckeln frivilligt före utgången, med en liten sannolikhet som ökar när utgångstiden närmar sig. På så sätt sprids omberäkningen över tid och någon anstormning uppstår aldrig.
Lägg till jitter i TTL-värden
Om många nycklar skrivs samtidigt, till exempel vid en driftsättning, löper de också ut samtidigt och orsakar en synkroniserad anstormning. Lägg till slumpmässig jitter i varje TTL så att utgångarna sprids ut.
SET product:42 "..." EX 305
SET product:43 "..." EX 318Frigör låset säkert
Ta bort låset efter återskapandet. Ge även låset en kort TTL, så att en kraschad arbetsprocess inte håller det för evigt och blockerar uppdateringar.
DEL lock:product:42Välj en strategi
Riktlinjer:
- Lås: enklast, fördröjer vissa begäranden kortvarigt
- Stale-while-revalidate: bäst användarupplevelse, kräver uppdatering i bakgrunden
- Probabilistisk utgång + jitter: jämnar ut belastningen, ingen väntan
Kombinera dem för mycket heta nycklar.
Negativ cachning
En relaterad risk är en miss på grund av cache penetration: många begäranden efter en nyckel som inte finns i databasen missar alltid cachen och överbelastar backend-systemet. Cacha även resultatet ”hittades inte” en kort stund, så att upprepade sökningar fångas upp.
SET product:9999 "__NULL__" EX 30Snabbtest
Testa Era kunskaper om hur cache-stampedes förhindras.
Sammanfattning
Ni har lärt Er att stoppa cache-stampedes:
- En cache-stampede överbelastar databasen när en het nyckel löper ut
- Ett
SET NX-lås för omberäkning begränsar återskapandet till en klient - Stale-while-revalidate levererar gamla data medan uppdateringen pågår
- Tidig probabilistisk utgång sprider ut omberäkningen
- Jitter för TTL förhindrar synkroniserade massutgångar
Lär dig Redis: cachelagring och meddelanden (Pub/Sub, Streams) med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Förhindra cache-stampeder och thundering herds” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Redis: cachelagring och meddelanden (Pub/Sub, Streams), inklusive ”Förhindra cache-stampeder och thundering herds”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Redis: cachelagring och meddelanden (Pub/Sub, Streams) innehåller totalt 4 lektioner.
Vad lär jag mig i ”Förhindra cache-stampeder och thundering herds”?
Lär Er vad en cache-stampede är, varför den överbelastar databasen när en populär nyckel löper ut och vilka låsnings- och uppdateringstekniker som håller backend säker under belastning. Ni övar på Redis: cachelagring och meddelanden (Pub/Sub, Streams) med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Redis: cachelagring och meddelanden (Pub/Sub, Streams)?
Du behöver inga förkunskaper. Utbildningen i Redis: cachelagring och meddelanden (Pub/Sub, Streams) på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Förhindra cache-stampeder och thundering herds”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Redis: cachelagring och meddelanden (Pub/Sub, Streams)-lektionen?
Ja. Varje Redis: cachelagring och meddelanden (Pub/Sub, Streams)-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Varför cache? Introduktion till cachning
- Implementera grundläggande cachemönster
- Cacherensning och cacheexpirering
- Förhindra cache-stampeder och thundering herds