Patronen voor cache-invalidatie
Pas cache-aside-, write-through- en TTL-gebaseerde strategieën voor invalidatie toe.
Patronen voor cache-invalidatie is een gratis PHP Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject PHP Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus PHP Academy bevat in totaal 4 lessen.
Het moeilijke probleem
"Er zijn maar twee moeilijke dingen in de informatica: cache-invalidatie en dingen een naam geven." — Phil Karlton. Weten wanneer en hoe je gegevens in de cache ongeldig maakt, is essentieel.
Verlopen op basis van TTL (passief)
De eenvoudigste strategie: stel een TTL in en accepteer dat de cache gedurende die periode verouderde gegevens kan leveren. Dit werkt wanneer een kleine afwijking in actualiteit aanvaardbaar is.
<?php
Cache::put("user:1", $user, 300); // expires in 5 minutes automaticallyDirecte invalidatie bij schrijven
Wanneer je gegevens bijwerkt, verwijder of wijzig je onmiddellijk de bijbehorende cachesleutel.
<?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);
}Cache-items labelen
Geef gerelateerde cache-items een label, zodat je in één keer een hele groep ongeldig kunt maken — bijvoorbeeld alle cache-items voor een specifieke gebruiker.
<?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();Gebeurtenisgestuurde invalidatie
Gebruik in Laravel gebeurtenissen van Eloquent-modellen om de cache automatisch ongeldig te maken wanneer een model wordt opgeslagen of verwijderd.
<?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 met versies
Voeg een versienummer toe aan cachesleutels. Door de versie te verhogen, maak je alle bestaande items effectief ongeldig zonder ze te verwijderen.
<?php
$v = Cache::get("user:version", 1);
$key = "user:{$id}:v{$v}";
// To invalidate: increment the version
Cache::increment("user:version");Probabilistisch voortijdig verlopen (PER)
Om cachestormen te voorkomen, bereken je de cache voor een deel van de aanvragen opnieuw voordat deze verloopt. Zo voorkom je dat de cache op alle servers tegelijk verloopt.
Vernieuwen op de achtergrond
Een achtergrondtaak vult veelgelezen cache-items opnieuw voordat ze verlopen. De cache is nooit leeg, waardoor leesbewerkingen altijd snel zijn.
Verouderde gegevens leveren tijdens vernieuwen
Lever onmiddellijk verouderde gegevens terwijl je de cache asynchroon op de achtergrond vernieuwt. Zo voorkom je latentiepieken door cachemissers.
Invalidatie van gedistribueerde caches
In een omgeving met meerdere servers wist een server die een cachesleutel ongeldig maakt niet automatisch de lokale caches van andere servers. Gebruik Redis publiceren en abonneren of een gedeelde opslag om invalidaties uit te zenden.
Cachehiërarchie
Gebruik meerdere cachelagen: een lokale cache binnen het proces (APCu) vóór een gedistribueerde cache (Redis). De lokale cache is sneller, maar moet op alle instanties ongeldig worden gemaakt wanneer gegevens veranderen.
Samenvatting
Veelgebruikte patronen: verlopen op basis van TTL (eenvoudig), verwijderen bij schrijven (accuraat), labelen (gegroepeerd) en gebeurtenisgestuurd (automatisch). Kies op basis van hoe actueel je gegevens moeten zijn en hoeveel eenvoud je nodig hebt.
Korte controle
Wat doet Cache::tags()->flush()?
Leer PHP met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 49
- Lessen
- 195
Veelgestelde vragen
Is de les “Patronen voor cache-invalidatie” gratis?
Ja — de volledige tekst van “Patronen voor cache-invalidatie” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus PHP Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus PHP Academy bevat in totaal 4 lessen.
Wat leer ik in “Patronen voor cache-invalidatie”?
Pas cache-aside-, write-through- en TTL-gebaseerde strategieën voor invalidatie toe. Je oefent met PHP Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met PHP Academy te beginnen?
Ervaring vooraf is niet nodig. PHP Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Patronen voor cache-invalidatie”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over PHP Academy?
Ja. Elke les over PHP Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Waarom caching belangrijk is in PHP
- Redis als PHP-cachebackend
- Memcached voor sessie- en objectcaching
- Patronen voor cache-invalidatie