ASP.NET Core Zwischenspeichern von Antworten mit IDistributedCache
ASP.NET Core bietet Antwort-Caching Dadurch können Sie die Serverantwort einer Clientanforderung für zukünftige Anforderungen zwischenspeichern.
Antwort-Caching steigert die Anwendungsleistung, da die Antwort aus dem Cache bereitgestellt wird. Darüber hinaus entlastet es die Server, da sie dieselbe Anfrage nicht erneut verarbeiten und eine Antwort darauf generieren müssen.
Note
Weitere Optionen zum Antwort-Caching mithilfe von Abhängigkeiten finden Sie unter ASP.NET Core Antwort-Caching.
Wann sollte Response Caching mit IDistributedCache verwendet werden?
Mit Response Caching können Anwendungselemente zwischengespeichert werden, die statisch sind und nur sehr selten geändert werden. Dazu gehören CSS-/JavaScript-Dateien, Medien oder Metadaten einer Webseite. Anstatt den Inhalt erneut vom Server anzufordern, können diese Daten aus dem Cache abgerufen werden.
Antwort-Caching-Optionen
HTTPS-basiertes Caching
Speichert Daten auf der Seite des Webbrowsers auf dem Client zwischen. Dies reduziert die Anzahl der Anfragen, die ein Client an den Webserver stellt, da alle nachfolgenden Anfragen vom Cache und nicht vom Webserver bearbeitet werden. Sobald die Antwort jedoch im Browser zwischengespeichert ist, läuft sie erst ab, wenn die zugewiesene Caching-Zeit abgelaufen ist, und kann bei Bedarf nicht gelöscht werden.
In-Memory-Caching
Speichert Daten mithilfe von ASP im Arbeitsspeicher des Servers.NET Coreist der eigene interne Caching-Anbieter. Diese Option ist flexibler für das Zwischenspeichern von Antworten als ASP.NET Core bietet Cache-Tag-Helfer Dies ermöglicht das Hinzufügen von Tags, um anzugeben, welche Ansicht der MVC-Anwendung zwischengespeichert werden soll. Da es sich hierbei um InProc handelt, können Sie bei Bedarf die ASP.NET-Engine neu starten, um den Cache zu leeren.
Verteiltes Caching
Speichert Daten im Arbeitsspeicher, wenn die Anwendung in einer Webfarm gehostet wird. Der Cache wird auf alle Server der Webfarm verteilt und jeder Server kann dem Client antworten, wenn angeforderte Daten im Cache verfügbar sind. Ähnlich wie beim In-Memory-Caching, Hilfsprogramm für verteilte Cache-Tags ermöglicht die Angabe genauer Ansichten, die zwischengespeichert werden müssen. Das ist wo NCache kommt ins Spiel, da es über seine IDistributedCache-Schnittstelle als verteilter Cache für Response Caching verwendet werden kann. Darüber hinaus erhalten Sie dadurch mehr Kontrolle über Ihre Anwendung, da der Cache skalierbar ist und Elemente bei Bedarf aus dem Cache entfernt werden können.
Die richtigen NCache für das Zwischenspeichern von Antworten
So verwenden Sie NCache als verteilter Cache für Response Caching, NCache bietet eigene Erweiterungsmethoden zum Konfigurieren von Diensten und Middleware.
Voraussetzungen:
- Installieren Sie die folgenden NuGet-Pakete in Ihrer Anwendung:
- Unternehmen: NCache.Microsoft.Extensions.Caching
- Professional: NCache.Microsoft.Extensions.Caching.Professional
- Open Source: NCache.Microsoft.Extensions.Caching.OpenSource
- zu verwenden NCacheFügen Sie mit den Methoden für das Antwort-Caching den folgenden Namespace in Ihre Anwendung ein:
- Der Cache muss ausgeführt werden.
- Einzelheiten zur API finden Sie unter: AddResponseCaching.
- Stellen Sie sicher, dass die hinzugefügten Daten serialisierbar.
- Um sicherzustellen, dass der Vorgang ausfallsicher ist, wird empfohlen, alle potenziellen Ausnahmen in Ihrer Anwendung zu behandeln, wie in erläutert Umgang mit Fehlern.
- Informationen zum Umgang mit unsichtbaren Ausnahmen finden Sie unter Problemlösung .
Konfigurieren Sie den Antwort-Caching-Dienst
ASP.NET Core stellt eine eigene Middleware für Response Caching bereit. Dies muss mithilfe von zur Service-Sammlung hinzugefügt werden AddResponseCaching Methode.
Offen Startup.cs Ihres Projekts.
Im
ConfigureServices
Methode, fügen Sie den folgenden Dienst hinzu:
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCaching();
// Remaining services here
}
Einrichtung NCache als verteilter Cache
NCache stellt über IDistributedCache benutzerdefinierte Methoden bereit, um sich selbst als verteilter Cache für ASP.NET-Anwendungen zu konfigurieren. Dazu ist lediglich ein Cache-Name erforderlich NCache und alle optionalen Konfigurationen zum Speichern des MVC-Inhalts.
Methode 1: Geben Sie die Cache-Konfiguration in AppSettings.json an
Die Cache-Konfigurationen können als separater Abschnitt in hinzugefügt werden Appsettings.json Ihrer Bewerbung. Im folgenden Beispiel wird ein Abschnitt hinzugefügt NCacheSettings
Dadurch wird der Cache-Name konfiguriert. Sie können den Namen entsprechend Ihrem registrierten Cache ändern.
Wichtig
Stellen Sie sicher, dass der angegebene Cache ausgeführt wird.
. . .
"NCacheSettings": {
"CacheName": "demoCache",
"EnableLogs": "True",
"ExceptionsEnabled": "True"
}
. . .
Nachdem die Cache-Konfiguration festgelegt wurde, NCache Dienste hinzugefügt werden sollen, die konfiguriert werden sollen NCache als verteilter Cache in der Anwendung.
Offen Startup.cs Ihres Projekts.
Im
ConfigureServices
fügen Sie die folgenden Dienste hinzu:AddNCacheDistributedCache
Erweiterungsmethode initialisiert Konfigurationen von Appsettings.json vor dem Hinzufügen der Dienste zum Container und fügt hinzu NCache als standardmäßiger verteilter Cache als Implementierung vonIDistributedCache
.
public void ConfigureServices(IServiceCollection services)
{
// Add NCache services to the container
services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
}
Methode 2: Geben Sie die Konfiguration in IOptions an
Eine andere Methode zum Angeben von Konfigurationen besteht darin, Konfigurationseinstellungen als bereitzustellen IOptions
.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services
services.AddMvc();
services.AddNCacheDistributedCache(configuration =>
{
configuration.CacheName = "demoCache";
configuration.EnableLogs = true;
configuration.ExceptionsEnabled = true;
});
}
Tag-Hilfsprogramm für verteilten Cache zur Ansichtsklasse hinzugefügt
Sobald NCache Nachdem alle Dienste für das Antwort-Caching konfiguriert wurden, können Sie jetzt den spezifischen Inhalt der Controller-Ansichten angeben, die Sie zwischenspeichern möchten. ASP.NET Core bietet Hilfsprogramm für verteilte Cache-Tags um Tags mit Parametern zum hinzuzufügen Views Dadurch wird der markierte Inhalt im konfigurierten Cache zwischengespeichert.
Das folgende Beispiel fügt die <distributed-cache>
Tag zum Inhalt in Views -> Über.cshtml mit unterschiedlichen Parametern. Beim Aktualisieren der Anwendung ändert sich der Inhalt des normalen Elements entsprechend DateTime.Now
, während der getaggte Inhalt beim Zwischenspeichern statisch bleibt.
Das
expires-after
Das Attribut gibt den absoluten Ablauf für den Inhalt an. Dieser Gegenstand wird nach Ablauf von 10 Sekunden aus dem Cache entfernt. Wenn die Anwendung jedoch aktualisiert wird, werden die Elemente erneut in den Cache geladen.Das
name
Das Attribut ist der eindeutige Bezeichner für den Cache für jede Instanz des Tag-Hilfsprogramms.Das
vary-by
Das Attribut behält das Element im Cache, bis die Abfragezeichenfolge in der URL mit dem in diesem Tag angegebenen Wert übereinstimmt.
Weitere Einzelheiten zu den Parametern finden Sie im Microsoft-Dokumentation für Taghilfsprogramme Bevor es weitergeht.
Sobald die Anwendung ausgeführt wird, können Sie die Cache-Statistiken über überwachen NCache Managementzentrum/NCache Monitor für Enterprise oder PerfMon Counters für 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>
Weitere Informationen
NCache stellt eine Beispielanwendung für Response Caching bereit GitHub.
Siehe auch
.NETZ: Alachisoft.NCache.ResponseCaching; Namespace.