ASP.NET Core Memorizzazione nella cache delle risposte
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.
Note:
Questa funzione è disponibile in NCache Enterprise solo.
Opzioni avanzate di memorizzazione nella cache delle risposte
Note:
Questa funzione è disponibile solo in NCache 5.2 poi.
Dipendenza dal database
NCache ti consente di aggiungere la dipendenza del database alla risposta memorizzata nella cache NCache. Il database può essere:
- Microsoft SQL Server o
- server Oracle
Aggiungendo la dipendenza dal database a qualsiasi pagina, qualsiasi modifica nel database rimuove la pagina dalla cache. Ciò mantiene i dati della cache sincronizzati con i dati nel database.
Invalidamento dei dati
Un'altra 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.
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.
- Installa il pacchetto NuGet seguente nell'applicazione in base al tuo NCache Versione:
- Enterprise: AspNetCore.ResponseCache.NCache
- Utilizzare NCacheper la memorizzazione nella cache delle risposte, includi il seguente spazio dei nomi nella tua 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.
- 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 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.
Specifica 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
ConfigureServices
metodo, aggiungere i seguenti servizi:I
AddOptions.Configure<NCacheConfiguration>
il metodo di estensione viene chiamato in fase di esecuzione. È possibile utilizzare questo metodo per aggiungere servizi al contenitore.I
AddNCacheResponseCachingServices
Il 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 cache distribuita NCache Tag Helper per visualizzare la 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 quale tipo di dipendenza del database è associata, ad esempio 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 * from products where @@id" connection-string-name="[connection_string_name] dependency-type="SQLServer|Oracle" invalidates="true">
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache-ncache>
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, "Elemento normale" cambierà in base DateTime.Now
, mentre il contenuto contrassegnato rimarrà statico mentre viene memorizzato nella cache.
I
expires-after
l'attributo specifica la scadenza assoluta del contenuto. Questo elemento verrà rimosso dalla cache una volta trascorsi 10 secondi. Tuttavia, se l'applicazione viene aggiornata, gli elementi vengono ricaricati nella cache.I
name
attributo è l'identificatore univoco per la cache per ogni istanza dell'helper tag.I
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 NCache Centro Direzionale/NCache Monitorare per NCache Enterpriseo Contatori PerfMon per NCache 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.