Redis: cachelagring och meddelanden (Pub/Sub, Streams) · Lektion

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.

Lektion 4 av 413 steg

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 10

Så 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 318

Frigö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:42

Vä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 30

Snabbtest

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
Gratis att börja

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

  1. Varför cache? Introduktion till cachning
  2. Implementera grundläggande cachemönster
  3. Cacherensning och cacheexpirering
  4. Förhindra cache-stampeder och thundering herds
← Tillbaka till Redis: cachelagring och meddelanden (Pub/Sub, Streams)