Caching in Laravel

La nostra applicazione è talmente popolare che il server non ce la fa a gestire migliaia di pagine.
Ogni richiesta della pagina è una query al db, il server rallenta, poi va in crash. Diverse le soluzioni:
un server più potente, refactoring del codice, caching delle query. Il servizio di caching offerto da Laravel è piuttosto intuitivo e di facile applicazione. Può essere utilizzato con i più importanti sistemi di caching backend (Memcached o Redis, ad esempio).
Ma può gestire anche il caching attraverso file, ed è questa l’impostazione di default che andremo ad utilizzare.

Dove si configura

Il file di configurazione è in config/cache.php e quello che ci interessa sapere è che la cartella per il caching è localizzata qui:

Non occorre modificare nulla per adesso (verifichiamo che la cartella in questione, però, abbia i permessi di scrittura).

Salvare dati in cache

Apriamo il nostro file di route e simuliamo una chiamata al db che ci restituisce un array di dati:

L’istruzione put accoglie tre valori: il primo è la chiave (che poi utilizzeremo per richiamare il dato), il secondo è il valore, il terzo è la quantità di minuti di “resistenza” della cache: allo scadere di questi ultimi il dato non sarà più disponibile. Ecco perché prima valorizzeremo una variabile che
rappresenta la data e l’ora con 10 minuti in più dell’ora attuale (now()).
Prima di procedere oltre, richiamiamo questa pagina per salvare i dati in cache (diamo per scontato che il webserver sia sulla porta 8888):

Ok, adesso i nostri dati sono in cache.

Recuperare i dati in cache

Per richiamare il dato salvato in cache è sufficiente questa istruzione:

Con get, dunque, andremo a recuperare ciò che abbiamo salvato. Per sapere se il dato è in cache, modifichiamo l’istruzione precedente con un if :

Aggiornare i dati

E’ possibile gestire anche il caso in cui i dati in cache non siano presenti e si desideri una chiamata ad un db per recuperarli e salvarli, dunque, in cache. Tutto in un colpo solo! Vediamo come:

Richiamiamo questa pagina: http://localhost:8888/se_non_ci_sono_recupera

Con il metodo “remember” Laravel controlla se sia o meno presente la chiave ‘lavoro’: se non è presente la crea con il dato della query simulata. Verifichiamo adesso se è stata creata:

Andiamo all’URL indicato: http://localhost:8888/esiste_cache
Se tutto è andato per il verso giusto, leggeremo ‘Web Developer’.

La cache è per sempre

E’ possibile anche utilizzare la cache in modo permanente, senza scadenza. Questa istruzione può essere utilizzata per dati per i quali siamo sicuri che non verranno mai aggiornati o solo di rado: al posto di put ecco cosa scrivere:

E possiamo sostituire il metodo richiamato precedentemente “remember”, con “forever”:

Cancellare la cache

Qualsiasi dato salvato in cache sia con il metodo put, sia con il metodo forever può essere cancellato:
l’istruzione è tanto semplice quanto importante:

Può essere utile anche richiamare il dato e cancellarlo subito dopo. Ecco come:

Per cancellare tutto il “pacchetto” in cache, invece:

Conclusioni

La cache è obbligatoria per i progetti medio grandi. In questo post abbiamo trattato una sola tipologia di caching: probabilmente la più semplice e la più comune.