Pattern di invalidazione della cache
Applicare strategie di invalidazione cache-aside, write-through e basate sul TTL.
Pattern di invalidazione della cache è una lezione PHP Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento PHP Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso PHP Academy include 4 lezioni in totale.
Il problema difficile
"In Informatica ci sono solo due problemi difficili: l'invalidazione della cache e dare un nome alle cose." — Phil Karlton. Sapere quando e come invalidare i dati memorizzati nella cache è fondamentale.
Scadenza basata sul TTL (passiva)
La strategia più semplice: imposti un TTL e accetti che la cache possa fornire dati obsoleti per un periodo massimo pari a quella durata. Funziona quando è accettabile una lieve obsolescenza dei dati.
<?php
Cache::put("user:1", $user, 300); // expires in 5 minutes automaticallyInvalidazione write-through
Quando aggiorna i dati, elimini o aggiorni immediatamente la chiave della cache corrispondente.
<?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);
}Tag per la cache
Assegni tag alle voci correlate della cache, così può invalidare un intero gruppo in una sola volta, ad esempio tutte le voci della cache di un utente specifico.
<?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();Invalidazione basata sugli eventi
In Laravel, utilizzi gli eventi dei modelli Eloquent per invalidare automaticamente la cache quando un modello viene salvato o eliminato.
<?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 con versioning
Aggiunga un numero di versione alle chiavi della cache. Incrementare la versione invalida di fatto tutte le voci esistenti senza eliminarle.
<?php
$v = Cache::get("user:version", 1);
$key = "user:{$id}:v{$v}";
// To invalidate: increment the version
Cache::increment("user:version");Scadenza anticipata probabilistica (PER)
Per evitare i cache stampede, ricalcoli la cache leggermente prima della scadenza per una parte delle richieste. In questo modo evita la scadenza simultanea su tutti i server.
Aggiornamento in background
Un job in background ripopola le voci della cache consultate frequentemente prima della loro scadenza. La cache non è mai vuota: le letture sono sempre rapide.
Stale-While-Revalidate
Fornisca immediatamente dati obsoleti mentre aggiorna la cache in modo asincrono in background. In questo modo elimina i picchi di latenza dovuti ai cache miss.
Invalidazione distribuita della cache
In una configurazione con più server, quando un server invalida una chiave della cache non elimina automaticamente le cache locali degli altri server. Utilizzi Redis pub/sub o un archivio condiviso per trasmettere le invalidazioni.
Gerarchia delle cache
Stratifichi le cache: una cache locale all'interno del processo (APCu) davanti a una cache distribuita (Redis). La cache locale è più veloce, ma deve essere invalidata su tutte le istanze quando cambiano i dati.
Riepilogo
Pattern comuni: scadenza tramite TTL (semplice), eliminazione write-through (accurata), tagging (per gruppi), basata sugli eventi (automatica). Scelga in base al livello di aggiornamento dei dati richiesto e alla semplicità desiderata.
Verifica rapida
Che cosa fa Cache::tags()->flush()?
Domande Frequenti
La lezione «Pattern di invalidazione della cache» è gratuita?
Sì — il testo completo di «Pattern di invalidazione della cache» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso PHP Academy, passa a CoddyKit PRO. Il corso PHP Academy include 4 lezioni in totale.
Cosa imparerò in «Pattern di invalidazione della cache»?
Applicare strategie di invalidazione cache-aside, write-through e basate sul TTL. Eserciti PHP Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare PHP Academy?
Non è richiesta alcuna esperienza precedente. PHP Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Pattern di invalidazione della cache»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione PHP Academy?
Sì. Ogni lezione PHP Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Perché il caching è importante in PHP
- Redis come backend di cache per PHP
- Memcached per il caching di sessioni e oggetti
- Pattern di invalidazione della cache