Memoizza le letture della cache con tag in Laravel
La cache memoizzata di Laravel, Cache::memo(), legge una chiave dal tuo cache store una volta e la serve dalla memoria per il resto della richiesta o del job. A partire da Laravel 13.33, funziona anche con i tag della cache, quindi puoi memoizzare valori con tag con Cache::memo()->tags().
Questo aiuta quando una richiesta legge lo stesso valore con tag molte volte. Una ricerca dei permessi potrebbe essere eseguita per ogni chiamata a can() e per ogni direttiva @can in una view, e senza memoizzazione ognuna ritorna al cache store.
Memoizzare una ricerca con tag
Chiama tags() sulla cache memoizzata e usala come qualsiasi altra cache con tag:
use Illuminate\Support\Facades\Cache;
public function getPermissions(User $user): Collection
{
return Cache::memo()
->tags(['permissions', "user:{$user->id}"])
->remember(
"permissions:{$user->id}",
now()->addHour(),
fn () => $this->loadPermissionsFromDatabase($user)
);
}La prima chiamata in una richiesta legge dal cache store, oppure esegue la closure in caso di cache miss. Le chiamate successive con gli stessi tag e la stessa chiave restituiscono il valore dalla memoria.
Prima che la cache memoizzata supportasse i tag, la soluzione alternativa era avvolgere tu stesso la cache con tag in uno store array:
return Cache::store('array')->tags('permission_cache')->rememberForever($cacheKey,
fn () => Cache::tags($this->cacheTags($user))->remember(
$cacheKey,
config('auth.permissions.default_cache_time'),
fn () => $this->loadPermissionsFromDatabase($user)
)
);Scritture e flush
I metodi che modificano un valore scrivono nella cache con tag e eliminano la copia memoizzata di quella chiave, quindi la lettura successiva torna allo store:
$cache = Cache::memo()->tags(['permissions']);
$cache->get('permissions:1'); // Reads from the cache store
$cache->get('permissions:1'); // Reads from memory
$cache->put('permissions:1', $updated); // Writes to the store, forgets the memoized value
$cache->get('permissions:1'); // Reads from the cache store againQuesto copre put(), putMany(), add(), increment(), decrement(), forever(), touch(), e forget(). Chiamare flush() su una cache con tag memoizzata esegue il flush dei tag nello store e cancella i valori con tag memoizzati.
Quando usarla
La cache memoizzata conserva ciò che la richiesta corrente ha già letto. Se un worker di coda o un'altra richiesta modifica il valore, questa richiesta non vede la modifica.
La userei per valori che non cambiano durante una richiesta, come permessi o impostazioni. Mantieni i contatori e qualsiasi cosa che un altro processo aggiorna a metà richiesta sulla cache normale.
I valori memoizzati si azzerano all'inizio di ogni richiesta o job, quindi i worker di lunga durata non mantengono dati obsoleti tra un job e l'altro.
Per approfondire
- Cache memoizzata con tag e refresh dei model in Laravel 13.33, la release che ha aggiunto
tags() - Driver di cache memoizzata in Laravel 12.9, dove
Cache::memo()è stato introdotto per la prima volta - Cerca ed elimina interattivamente le chiavi di cache in Laravel con Cache UI
- Memoizzazione della cache nella documentazione di Laravel
- Pull request #61593 di Joost de Bruijn
Fonte originale:
https://laravel-news.com/laravel-tagged-memoized-cacheAltri articoli recenti
Laravel AI 1.1 e 1.2: Agent Skills, Cohere e structured output più solidi
Le release 1.1.0 e 1.2.0 di laravel/ai portano gli Agent Skills, l'approvazione obbligatoria per i tool built-in e nuovi provider come Cohere e Laya self-hosted. Sul fronte qualità arrivano i fix allo structured output per Bedrock e il supporto alle provider options. Aggiornati anche i modelli di default, con Claude 4.7+ che ignora i sampling params.
Laravel 13.35.0: scheduler più controllabile, code più flessibili e response Markdown
Laravel 13.35.0 porta Schedule::alwaysOnOneServer(), il supporto a schedule:interrupt per i comandi di lunga durata, --memory in percentuale per queue:work e il nuovo metodo markdown() sulla response factory. Tante piccole migliorie anche a test, view compilate in parallelo e dischi local.
BashBox: un interprete Bash in sandbox per agenti AI in PHP
BashBox è un interprete bash scritto in puro PHP che permette di eseguire gli script generati dagli agenti AI senza mai ricorrere a proc_open, exec o shell_exec. Ogni comando è una classe PHP che lavora su un filesystem virtuale, con limiti di esecuzione, quote disco e accesso di rete configurabili. Ideale per chi sviluppa agenti con il Laravel AI SDK o altre librerie simili.