Memorizzazione nella cache delle risposte di ASP.NET Core
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. NCache agisce come un fornitore di cache di risposta distribuita per superare i limiti della memorizzazione nella cache della memoria locale, garantendo una distribuzione coerente dei contenuti tra web farm con bilanciamento del carico.
Opzioni avanzate di memorizzazione nella cache delle risposte
Note:
Questa funzione è disponibile solo in NCache 5.2 poi.
Quando invalidare le risposte memorizzate nella cache di ASP.NET Core?
La tecnica fornita da NCache per mantenere aggiornati i dati della cache ed eliminare i dati obsoleti è l'invalidazione dei dati. Se una risposta viene memorizzata nella cache e in qualsiasi momento i dati vengono modificati su quella pagina, il che influisce sugli altri dati, la cache è costretta a recuperare nuovi dati. Ad esempio, se si rimuove con successo un articolo dal carrello su un sito di e-commerce, il carrello deve riflettere le modifiche apportate, invalidando così i dati.
Un tag di invalidazione viene aggiunto ai dati osservabili ed è responsabile della rimozione dei dati non validi o obsoleti dalla cache. I nuovi dati vengono quindi recuperati dal database rispetto ai dati invalidati. Con il tag di invalidamento dei dati impostato su True per le pagine di successo nell'aggiornamento dei dati, qualsiasi risposta memorizzata nella cache viene invalidata per ottenere una nuova risposta dalla cache.
Prerequisiti
Prima di utilizzare la memorizzazione nella cache delle risposte di ASP.NET Core con NCache, assicurarsi che siano soddisfatti i seguenti prerequisiti:
- Installa il pacchetto NuGet seguente nell'applicazione in base al tuo NCache edizione:
- Enterprise: AspNetCore.ResponseCache.NCache
- Utilizzare NCachePer i metodi di caching delle risposte, includere il seguente namespace nell'applicazione:
- La cache deve essere in esecuzione.
- L'applicazione deve essere connesso alla cache prima di eseguire l'operazione.
- Per i dettagli dell'API, fare riferimento a: AggiungiNCacheServizi di caching delle risposte, NCacheConfigurazione.
- Assicurati che i dati aggiunti lo siano serializzabile.
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 AggiungiResponseCaching metodo.
Apri Avvio.cs del tuo progetto.
Nel
ConfigureServicesmetodo, aggiungi il seguente servizio:
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCaching();
// Remaining services here
}
Note:
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.
Configurazione NCache come cache distribuita
NCache fornisce metodi personalizzati 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. Specifichiamo il seguente metodo per la configurazione.
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 cache registrata. Dopo aver aggiunto il nome della cache, è possibile fornire il nome della stringa di connessione predefinita che contiene il nome della stringa di connessione per stabilire una connessione con il server per aggiungere la dipendenza del database. Nel caso di più stringhe di connessione per più database, la stringa di connessione predefinita decide quale nome di database utilizzare. Ogni stringa di connessione deve avere un nome come mostrato di seguito.
Consigli
Assicurati che la cache specificata sia in esecuzione.
. . .
"NCacheSettings": {
"CacheName": "demoCache",
"EnableLogs": "True",
"ExceptionsEnabled": "True"
"DefaultConnectionStringName": "DBServer1"
},
"ConnectionStrings": {
"DBServer1": "Data Source=20.20.20.40 \\SQLEXPRESS;Database=Northwind;User Id=admin;password=xxxxxxxx"
}
. . .
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
ConfigureServicesmetodo, aggiungere i seguenti servizi:Migliori
AddOptions.Configure<NCacheConfiguration>il metodo di estensione viene chiamato in fase di esecuzione. È possibile utilizzare questo metodo per aggiungere servizi al contenitore.Migliori
AddNCacheResponseCachingServicesIl metodo di estensione inizializza le configurazioni relative alla dipendenza dal database e all'invalidazione da appsettings.json.
public void ConfigureServices(IServiceCollection services)
{
// Read NCache specific configurations from app.settings.json
services.AddOptions().Configure<NCacheConfiguration>(Configuration.GetSection("NCacheSettings"));
// Register NCache for response caching with dependency or invalidation
services.AddNCacheResponseCachingServices();
}
Aggiungi NCache Funzione di supporto per i tag della cache distribuita per la visualizzazione della classe
Come accennato in precedenza, per aggiungere la dipendenza del database con i dati nella cache, un tag <distributed-cache-ncache> viene utilizzato per specificare i parametri. Questo tag è derivato dalla classe helper tag distribuito ed eredita gli attributi di questa classe. Per favore, segui questo documentazione per ottenere informazioni dettagliate sugli attributi che possono essere specificati.
NCache fornisce i seguenti attributi in questa classe per aggiungere la dipendenza:
<name>: la chiave dell'elemento presente nella cache come identificatore univoco.<depends-on>: una query che seleziona gli elementi dal database da cui dipende la risposta. Il formato della query contiene il nome del parametro che è una variabile che reindirizza alla risposta memorizzata nella cache. Il nome del parametro può fare distinzione tra maiuscole e minuscole, ma deve essere coerente con il nome del parametro nella risposta memorizzata nella cache. Allo stesso modo per le query con parametri, "@@" viene aggiunto prima del nome del parametro. Ad esempio, se la dipendenza viene aggiunta all'ID persona, il nome del parametro deve essere coerente sia nelle pagine dipendenti che in quelle di risposta.<dependency-type>Definisce il tipo di dipendenza dal database associata, ovvero Oracle o SQL Server.
Note:
Puoi anche aggiungere il nome della stringa di connessione predefinita in questo tag. Nel caso in cui non venga aggiunta alcuna stringa di connessione predefinita, verrà utilizzata la stringa di connessione predefinita menzionata nel file appsettings.json viene utilizzato.
<dependency type: "SQLServer" connection-string-name="DBServer">
<invalidates>: un flag booleano impostato su True se l'invalidamento viene aggiunto con un attributo. Impostando il flag True, ad ogni modifica che avviene nell'elemento dipendente, tutte le pagine relative a quella chiave vengono invalidate.
Di seguito è riportato un file di esempio che mostra la dipendenza SQL aggiunta con una risposta:
<distributed-cache-ncache
name="key1"
depends-on="SELECT ProductID, ProductName FROM dbo.Products WHERE ProductID = @@id"
connection-string-name="[connection_string_name]"
dependency-type="SQLServer"
invalidates="true">
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache-ncache>
Aggiungi Distributed Cache Tag Helper alla vista
Quando NCache I servizi 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, "Elemento normale" cambierà in base DateTime.Now, mentre il contenuto contrassegnato rimarrà statico mentre viene memorizzato nella cache.
Migliori
expires-afterL'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.Migliori
nameattributo è l'identificatore univoco per la cache per ogni istanza dell'helper tag.Migliori
vary-byL'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 Monitorare per NCache Enterprise.
@{
ViewData["Title"] = "About";
}
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
<p> The value for this item will change every time 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 the 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.Risposta nella cache spazio dei nomi.