ASP.NET Core Memorizzazione nella cache delle risposte con IDistributedCache
ASP.NET Core fornisce Memorizzazione nella cache delle risposte che consente di memorizzare nella cache la risposta del server di una richiesta client per richieste future.
La memorizzazione nella cache delle risposte migliora le prestazioni dell'applicazione poiché la risposta viene fornita dalla cache. Inoltre, riduce il carico di elaborazione dei server poiché non è necessario elaborare e generare nuovamente una risposta per la stessa richiesta.
Note:
Per le opzioni avanzate relative alla memorizzazione nella cache delle risposte utilizzando la dipendenza, vai a ASP.NET Core Memorizzazione nella cache delle risposte.
Quando utilizzare la memorizzazione nella cache delle risposte con IDistributedCache?
La memorizzazione nella cache delle risposte può essere utilizzata per memorizzare nella cache elementi dell'applicazione che sono statici e hanno una frequenza di modifica molto ridotta. Ciò include file CSS/JavaScript, contenuti multimediali o metadati di una pagina web. Pertanto, invece di richiedere nuovamente il contenuto al server, questi dati possono essere recuperati dalla cache.
Opzioni di memorizzazione nella cache delle risposte
Caching basato su HTTPS
Memorizza nella cache i dati all'estremità del browser Web sul client. Ciò riduce il numero di richieste che un client effettua al server web, poiché qualsiasi richiesta successiva verrà gestita dalla cache anziché dal server web. Tuttavia, una volta memorizzata nella cache del browser, la risposta scadrà solo allo scadere del tempo di memorizzazione nella cache assegnato e non potrà essere cancellata quando necessario.
Cache in memoria
Memorizza nella cache i dati nella memoria del server, utilizzando ASP.NET Coreil proprio provider di caching interno. Questa opzione è più flessibile per la memorizzazione nella cache delle risposte come ASP.NET Core fornisce Aiuto tag cache che consente di aggiungere tag per specificare quale vista dell'applicazione MVC deve essere memorizzata nella cache. Poiché si tratta di InProc, è possibile riavviare il motore ASP.NET per svuotare la cache quando necessario.
Caching distribuito
Memorizza nella cache i dati in memoria, se l'applicazione è ospitata in una web farm. La cache è distribuita su tutti i server della web farm e qualsiasi server può rispondere al client se i dati richiesti sono disponibili nella cache. Simile alla memorizzazione nella cache in memoria, Helper tag cache distribuito consente di specificare le viste esatte che devono essere memorizzate nella cache. Qui è dove NCache entra in gioco, poiché può essere utilizzato come cache distribuita per la memorizzazione nella cache delle risposte tramite la sua interfaccia IDistributedCache. Inoltre, questo estende un maggiore controllo alla tua applicazione poiché la cache è scalabile e gli elementi possono essere rimossi dalla cache quando necessario.
utilizzando NCache per la memorizzazione nella cache delle risposte
Per utilizzare NCache come cache distribuita per la memorizzazione nella cache delle risposte, NCache fornisce i propri metodi di estensione per configurare servizi e middleware.
Prerequisiti
- Installa i seguenti pacchetti NuGet nell'applicazione:
- Enterprise: NCache.Microsoft.Estensioni.Memorizzazione nella cache
- Saloni professionali: NCache.Microsoft.Extensions.Caching.Professional
- Fonte aperta: NCache.Microsoft.Extensions.Caching.OpenSource
- Utilizzare NCacheper la memorizzazione nella cache delle risposte, includi il seguente spazio dei nomi nella tua applicazione:
- La cache deve essere in esecuzione.
- Per i dettagli dell'API fare riferimento a: AggiungiResponseCaching.
- Assicurati che i dati aggiunti lo siano serializzabile.
- Per garantire che l'operazione sia a prova di errore, si consiglia di gestire eventuali potenziali eccezioni all'interno dell'applicazione, come spiegato in Gestione dei guasti.
- Per gestire eventuali eccezioni invisibili, fare riferimento a Troubleshooting .
Configura il servizio di memorizzazione nella cache delle risposte
ASP.NET Core fornisce il proprio middleware per la memorizzazione nella cache delle risposte. Questo deve essere aggiunto alla raccolta di servizi utilizzando il file AggiungiResponseCaching metodo.
Apri Avvio.cs del tuo progetto.
Nel
ConfigureServices
metodo, aggiungi il seguente servizio:
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCaching();
// Remaining services here
}
Configurazione NCache come cache distribuita
NCache fornisce metodi personalizzati tramite IDistributedCache per configurarsi come cache distribuita per le applicazioni ASP.NET. Ciò richiede solo un nome cache NCache e qualsiasi configurazione opzionale per archiviare il contenuto MVC.
Metodo 1: specificare la configurazione della cache in AppSettings.json
Le configurazioni della cache possono essere aggiunte come una sezione separata in Appsettings.json della tua domanda. L'esempio seguente aggiunge una sezione NCacheSettings
che configura il nome della cache. Puoi cambiare il nome in base alla tua cache registrata.
Consigli
Assicurati che la cache specificata sia in esecuzione.
. . .
"NCacheSettings": {
"CacheName": "demoCache",
"EnableLogs": "True",
"ExceptionsEnabled": "True"
}
. . .
Una volta specificata la configurazione della cache, NCache i servizi devono essere aggiunti per configurare NCache come cache distribuita nell'applicazione.
Apri Avvio.cs del tuo progetto.
Nel
ConfigureServices
metodo, aggiungere i seguenti servizi:AddNCacheDistributedCache
il metodo di estensione inizializza le configurazioni da Appsettings.json prima di aggiungere i servizi al contenitore e aggiunge NCache come cache distribuita predefinita come implementazione diIDistributedCache
.
public void ConfigureServices(IServiceCollection services)
{
// Add NCache services to the container
services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
}
Metodo 2: specificare la configurazione in IOptions
Un altro metodo per specificare le configurazioni consiste nel fornire le impostazioni di configurazione come IOptions
.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services
services.AddMvc();
services.AddNCacheDistributedCache(configuration =>
{
configuration.CacheName = "demoCache";
configuration.EnableLogs = true;
configuration.ExceptionsEnabled = true;
});
}
Aggiungi l'helper tag cache distribuita per visualizzare la classe
Quando NCache sono stati configurati per la memorizzazione nella cache delle risposte, è ora possibile specificare il contenuto specifico delle viste del controller che si desidera memorizzare nella cache. ASP.NET Core fornisce Helper tag cache distribuito per aggiungere tag con parametri al file Visualizzazioni che memorizzerà nella cache il contenuto contrassegnato nella cache configurata.
L'esempio seguente aggiunge il <distributed-cache>
taggare il contenuto in Visualizzazioni -> Informazioni su.cshtml con parametri variabili. Dopo aver aggiornato l'applicazione, il contenuto dell'elemento normale cambierà in base DateTime.Now
, mentre il contenuto taggato rimarrà statico poiché viene memorizzato nella cache.
Il
expires-after
L'attributo specifica la scadenza assoluta per il contenuto. Questo elemento verrà rimosso dalla cache una volta trascorsi 10 secondi. Tuttavia, se l'applicazione viene aggiornata, gli elementi vengono ricaricati nella cache.Il
name
attributo è l'identificatore univoco per la cache per ogni istanza dell'helper tag.Il
vary-by
L'attributo mantiene l'elemento nella cache finché la stringa di query nell'URL non è la stessa per il valore specificato in questo tag.
Per maggiori dettagli sui parametri, fare riferimento a Documentazione Microsoft per Tag Helpers prima di procedere.
Una volta eseguita l'applicazione, è possibile monitorare le statistiche della cache tramite il file NCache Centro Direzionale/NCache Monitor per Enterprise o contatori PerfMon per Professional.
@{
ViewData["Title"] = "About";
}
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
<p> The value for this item will change everytime the application is refreshed.</p>
<div>@DateTime.Now.ToString()</div><br />
<p>The value for this item will be static and remain in the cache forever, unless cache is cleared.</p>
<distributed-cache name="Key:1" >
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache>
<p>The value for this item will be static upon refreshing the application, but it will expire after 10 seconds.</p>
<distributed-cache name="Key:2" expires-after ="TimeSpan.FromSeconds(10)">
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache>
<p>The value for this item will be static and will only be removed from cache if the "vary-by" value is changed.</p>
<distributed-cache name="Key:3" vary-by ="test">
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache>
Risorse addizionali
NCache fornisce un'applicazione di esempio per la memorizzazione nella cache delle risposte GitHub.
Vedere anche
.NETTO: Alachisoft.NCache.ResponseCaching; spazio dei nomi.