Mønstre for cache-invalidering
Anvend strategier for cache-aside, write-through og TTL-baseret invalidering.
Mønstre for cache-invalidering er en gratis PHP Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i PHP Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. PHP Academy-kurset indeholder 4 lektioner i alt.
Det vanskelige problem
"Der er kun to vanskelige ting i datalogi: ugyldiggørelse af cache og navngivning af ting." — Phil Karlton. Det er afgørende at vide, hvornår og hvordan cachelagrede data skal ugyldiggøres.
Udløb baseret på TTL (passivt)
Den enkleste strategi: Indstil en TTL, og accepter, at cachen kan levere forældede data i op til denne periode. Det fungerer, når en smule forældelse er acceptabel.
<?php
Cache::put("user:1", $user, 300); // expires in 5 minutes automaticallyUgyldiggørelse ved skrivning
Når du opdaterer data, skal du straks slette eller opdatere den tilsvarende cache-nøgle.
<?php
function updateUser(int $id, array $data): void {
User::find($id)->update($data);
Cache::forget("user:$id"); // delete cache
// Or re-warm:
Cache::put("user:$id", User::find($id), 300);
}Cachemærkning
Mærk relaterede cacheposter, så du kan ugyldiggøre en hel gruppe på én gang — for eksempel alle cacheposter for en bestemt bruger.
<?php
// Store with tags:
Cache::tags(["user:1", "posts"])->put("user:1:recent-posts", $posts, 600);
// Invalidate all "user:1" entries:
Cache::tags("user:1")->flush();Hændelsesdrevet ugyldiggørelse
I Laravel kan du bruge Eloquent-modelhændelser til automatisk at ugyldiggøre cachen, når en model gemmes eller slettes.
<?php
class User extends Model {
protected static function booted(): void {
static::saved(fn($u) => Cache::forget("user:{$u->id}"));
static::deleted(fn($u) => Cache::forget("user:{$u->id}"));
}
}Cache-aside med versionsstyring
Føj et versionsnummer til cache-nøgler. Når du øger versionsnummeret, ugyldiggøres alle eksisterende poster effektivt, uden at de slettes.
<?php
$v = Cache::get("user:version", 1);
$key = "user:{$id}:v{$v}";
// To invalidate: increment the version
Cache::increment("user:version");Sandsynlighedsbaseret tidlig udløb (PER)
For at forhindre cache-stormløb skal du genberegne cachen en smule før udløbet for en del af forespørgslerne. Det forhindrer samtidig udløb på alle servere.
Opdatering i baggrunden
Et baggrundsjob udfylder ofte læste cacheposter igen, før de udløber. Cachen er aldrig tom — læsninger er altid hurtige.
Forældet-udfør-nyvalidering
Lever forældede data med det samme, mens cachen opdateres asynkront i baggrunden. Det fjerner latenstoppe ved cache-mis.
Distribueret ugyldiggørelse af cache
I en opsætning med flere servere rydder én servers ugyldiggørelse af en cache-nøgle ikke automatisk de andre serveres lokale cacher. Brug Redis pub/sub eller et delt lager til at udsende ugyldiggørelser.
Cachehierarki
Lagdelte cacher: en lokal cache i processen (APCu) foran en distribueret cache (Redis). Den lokale cache er hurtigere, men skal ugyldiggøres på tværs af alle instanser, når data ændres.
Opsummering
Almindelige mønstre: TTL-udløb (enkelt), sletning ved skrivning (præcist), mærkning (grupperet) og hændelsesdrevet ugyldiggørelse (automatisk). Vælg ud fra, hvor høj aktualitet du har brug for, sammenholdt med enkelhed.
Hurtigt tjek
Hvad gør Cache::tags()->flush()?
Lær PHP med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 49
- Lektioner
- 195
Ofte stillede spørgsmål
Er lektionen “Mønstre for cache-invalidering” gratis?
Ja — hele teksten til “Mønstre for cache-invalidering” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af PHP Academy-kurset, skal du opgradere til CoddyKit PRO. PHP Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Mønstre for cache-invalidering”?
Anvend strategier for cache-aside, write-through og TTL-baseret invalidering. Du øver dig i PHP Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på PHP Academy?
Der kræves ingen tidligere erfaring. PHP Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Mønstre for cache-invalidering”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne PHP Academy-lektion?
Ja. Alle PHP Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Hvorfor caching er vigtigt i PHP
- Redis som PHP-cachebackend
- Memcached til session- og objektcaching
- Mønstre for cache-invalidering