Strategier for ugyldiggjøring av cache
Lær hvordan De holder bufrede data oppdaterte og konsistente med TTL-er, write-through, write-behind og hendelsesstyrt ugyldiggjøring i Redis.
Strategier for ugyldiggjøring av cache er en gratis leksjon i Redis-bufring og meldinger (Pub/Sub, Streams) på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Redis-bufring og meldinger (Pub/Sub, Streams), og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Redis-bufring og meldinger (Pub/Sub, Streams) inneholder totalt 4 leksjoner.
Hvorfor ugyldiggjøring er viktig
Caching gjør lesing raskere, men en cache som leverer utdaterte data, kan være verre enn ingen cache i det hele tatt. Cache-invalidering er praksisen med å fjerne eller oppdatere oppføringer når den underliggende kilden endres.
Det er kjent for å være vanskelig: Det finnes bare to vanskelige ting i informatikk, og én av dem er cache-invalidering.
Utløp basert på TTL
Den enkleste strategien er time-to-live. Du aksepterer at data kan være utdaterte i høyst N sekunder.
SET key value EX 60utløper etter 60 sekunderEXPIRE key 60angir en TTL for en eksisterende nøkkelTTL keyviser gjenværende sekunder
SET user:42:profile "...json..." EX 60
TTL user:42:profile
EXPIRE user:42:profile 120Write-through-caching
Ved write-through-caching går hver skriving til både databasen og cachen i samme operasjon. Lesinger er alltid oppdaterte, men skrivinger blir tregere.
Applikasjonen har ansvaret for å holde de to i synkronisering.
def save_user(user):
db.update(user)
redis.set('user:' + user.id, serialize(user))
return userWrite-behind-caching
Write-behind (write-back) skriver først til cachen og tømmer den til databasen asynkront. Skrivinger går raskt, men du risikerer datatap hvis Redis går ned før tømmingen.
Bruk en kø eller strøm til å bufre ventende skrivinger.
redis.set('order:' + id, data)
redis.lpush('pending_writes', id)Eksplisitt sletting ved oppdatering
Mønsteret cache-aside + sletting: Ved hver oppdatering av databasen sletter du den bufrede nøkkelen. Den neste lesingen fyller den opp igjen.
Dette hindrer levering av utdaterte data og er enklere enn å holde cache-verdien synkronisert.
def update_product(p):
db.update(p)
redis.delete('product:' + p.id)Hvorfor sletting er bedre enn oppdatering
Ved å slette nøkkelen i stedet for å overskrive den unngår du en kappløpssituasjon: To samtidige oppdateringer kunne ellers ha skrevet verdier i feil rekkefølge. Ved sletting henter den neste lesingen alltid den nyeste verdien fra kilden.
Versjonerte nøkler
I stedet for å ugyldiggjøre en nøkkel øker du et versjonsnummer som er innbakt i nøkkelen. Gamle nøkler utløper naturlig via TTL, mens nye lesinger bruker den nye nøkkelen.
INCR config:version
GET config:version
SET config:v7:settings "..."Hendelsesdrevet ugyldiggjøring
Publiser en ugyldiggjøringshendelse hver gang data endres. Andre applikasjonsnoder abonnerer og tømmer sine lokale cacher. Dette kombinerer Redis Pub/Sub med caching.
redis.publish('invalidate', 'user:42')
# subscribers:
redis.subscribe('invalidate')Taggbasert ugyldiggjøring
Gruppér relaterte nøkler i et taggsett. Når en tagg blir ugyldig, sletter du alle medlemsnøklene i én operasjon.
SADD tag:user:42 product:1 product:2- Ved endring:
SMEMBERS tag:user:42og deretterDELfor hver
SADD tag:user:42 cart:42 wishlist:42
SMEMBERS tag:user:42Unngå stampeder
Når en populær nøkkel utløper, kan mange forespørsler treffe databasen samtidig (en cache-stampede). Begrens dette med en kortvarig lås, probabilistisk tidlig utløp eller ved å levere litt utdaterte data mens én arbeider oppdaterer dem.
SET lock:user:42 1 NX EX 5Velge en strategi
Det finnes ingen enkelt beste fremgangsmåte:
- TTL når utdaterte data kan aksepteres
- Sletting ved skriving når korrekthet er viktig
- Hendelsesdrevet for konsistens mellom flere noder
- Versjonering for omfattende konfigurasjonsendringer
Hurtigsjekk
Test forståelsen din av strategier for ugyldiggjøring.
Oppsummering
Du har lært de viktigste strategiene for cache-invalidering: TTL-utløp, write-through, write-behind, sletting ved skriving, versjonerte nøkler, hendelsesdrevet og taggbasert ugyldiggjøring, samt hvordan du unngår cache-stampeder. Velg strategien som passer toleransen din for utdaterte data og behovene dine for konsistens.
Lær deg Redis-bufring og meldinger (Pub/Sub, Streams) med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Strategier for ugyldiggjøring av cache» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Redis-bufring og meldinger (Pub/Sub, Streams), inkludert «Strategier for ugyldiggjøring av cache», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Redis-bufring og meldinger (Pub/Sub, Streams) inneholder totalt 4 leksjoner.
Hva lærer jeg i «Strategier for ugyldiggjøring av cache»?
Lær hvordan De holder bufrede data oppdaterte og konsistente med TTL-er, write-through, write-behind og hendelsesstyrt ugyldiggjøring i Redis. Du øver på Redis-bufring og meldinger (Pub/Sub, Streams) med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Redis-bufring og meldinger (Pub/Sub, Streams)?
Ingen tidligere erfaring er nødvendig. Redis-bufring og meldinger (Pub/Sub, Streams) på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Strategier for ugyldiggjøring av cache»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Redis-bufring og meldinger (Pub/Sub, Streams)-leksjonen?
Ja. Alle Redis-bufring og meldinger (Pub/Sub, Streams)-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Avanserte cachemønstre
- Sesjonshåndtering med Redis
- Begrensning av forespørselsfrekvens og antimønstre
- Strategier for ugyldiggjøring av cache