Negli scorsi script ci siamo occupati di Output Cache in ASP.NET Core 7, e abbiamo iniziato ad apprezzarne la flessibilità e semplicità di configurazione. Abbiamo però trascurato un aspetto fondamentale per questo tipo di funzionalità: per quanto tempo una determinata risposta deve rimanere in cache?
Per default, la durata della cache è di un minuto, tuttavia possiamo facilmente modificare questa impostazione all'interno del solito metodo CacheOutput, quando stiamo definendo un endpoint di Minimal API:
app.MapGet("/cacheDemoInline", (string name) => $"Hello, {name}, time is {DateTime.Now.ToLongTimeString()}") .CacheOutput(builder => { builder.Expire(TimeSpan.FromSeconds(10)); });
Avere questa impostazione "inline" è sicuramente molto comodo, ma risulta impraticabile quando il numero degli endpoint aumenta, soprattutto se vogliamo mantenere una certa consistenza nel comportamento della nostra applicazione.
In questi casi, allora, è molto utile definire delle policy centralizzate, che poi possiamo utilizzare nei vari endpoint. Possiamo farlo in fase di registrazione del servizio:
builder.Services.AddOutputCache(config => { config.AddPolicy("shortCache", policy => { policy.Expire(TimeSpan.FromSeconds(30)); }); config.AddPolicy("longCache", policy => { policy.Expire(TimeSpan.FromMinutes(2)); }); });
Nello snippet in alto abbiamo definito due policy, shortCache e longCache, che possiamo poi referenziare tramite il loro nome, ove necessario:
app.MapGet("/cacheDemoShort", (string name) => $"Hello, {name}, time is {DateTime.Now.ToLongTimeString()}") .CacheOutput("shortCache"); app.MapGet("/cacheDemoLong", (string name) => $"Hello, {name}, time is {DateTime.Now.ToLongTimeString()}") .CacheOutput("longCache");
Tra tutte le policy, quella utilizzata per default è denominata Base Policy, e anch'essa può essere modificata in maniera simile:
builder.Services.AddOutputCache(config => { config.AddBasePolicy(policy => { policy.Expire(TimeSpan.FromSeconds(10)); }); // .. altre policy qui .. });
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Ricevere notifiche sui test con Azure Load Testing
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Utilizzare Azure AI Studio per testare i modelli AI
Utilizzare QuickGrid di Blazor con Entity Framework
Referenziare un @layer più alto in CSS
Migliorare la sicurezza dei prompt con Azure AI Studio
La gestione della riconnessione al server di Blazor in .NET 9
Ottimizzare le performance usando Span<T> e il metodo Split
Aggiornare a .NET 9 su Azure App Service