Redis-bufring og meldinger (Pub/Sub, Streams) · leksjon

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.

Leksjon 4 av 413 trinn

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 60 utløper etter 60 sekunder
  • EXPIRE key 60 angir en TTL for en eksisterende nøkkel
  • TTL key viser gjenværende sekunder
SET user:42:profile "...json..." EX 60
TTL user:42:profile
EXPIRE user:42:profile 120

Write-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 user

Write-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:42 og deretter DEL for hver
SADD tag:user:42 cart:42 wishlist:42
SMEMBERS tag:user:42

Unngå 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 5

Velge 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.

Gratis å komme i gang

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

  1. Avanserte cachemønstre
  2. Sesjonshåndtering med Redis
  3. Begrensning av forespørselsfrekvens og antimønstre
  4. Strategier for ugyldiggjøring av cache
← Tilbake til Redis-bufring og meldinger (Pub/Sub, Streams)