Cache-Taghilfsprogramm im ASP.NET Core MVC
Von Peter Kellner
Durch das Cache-Taghilfsprogramm kann die Leistung Ihrer ASP.NET Core-App verbessert werden, indem deren Inhalte im internen ASP.NET Core-Cacheanbieter zwischengespeichert werden.
Eine Übersicht über Taghilfsprogramme finden Sie unter Taghilfsprogramme in ASP.NET Core.
Das folgende Razor-Markup speichert das aktuelle Datum zwischen:
<cache>@DateTime.Now</cache>
Über die erste Anforderung an die Seite, die das Taghilfsprogramm enthält, wird das aktuelle Datum zurückgegeben. Über zusätzliche Anforderungen werden die zwischengespeicherten Werte angezeigt, bis der Cache abläuft (standardmäßig 20 Minuten lang) oder bis das zwischengespeicherte Datum aus dem Cache entfernt wird.
Attribute von Cache-Taghilfsprogrammen
enabled
Attributtyp | Beispiele | Standard |
---|---|---|
Boolean | true , false |
true |
enabled
legt fest, ob der Inhalt zwischengespeichert wird, der vom Cache-Taghilfsprogramm eingeschlossen wird. Der Standardwert ist true
. Wenn diese Option auf false
festgelegt ist, wird die gerenderte Ausgabe nicht zwischengespeichert.
Beispiel:
<cache enabled="true">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
expires-on
Attributtyp | Beispiel |
---|---|
DateTimeOffset |
@new DateTime(2025,1,29,17,02,0) |
expires-on
legt die absolute Ablaufzeit für das zwischengespeicherte Element fest.
Im folgenden Beispiel werden die Inhalte des Cache-Taghilfsprogramms bis zum 29. Januar 2025 um 17:02 Uhr zwischengespeichert:
<cache expires-on="@new DateTime(2025,1,29,17,02,0)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
expires-after
Attributtyp | Beispiel | Standard |
---|---|---|
TimeSpan |
@TimeSpan.FromSeconds(120) |
20 Minuten |
expires-after
legt die Zeitspanne ab der ersten Anforderungszeit fest, um die Inhalte zwischenzuspeichern.
Beispiel:
<cache expires-after="@TimeSpan.FromSeconds(120)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
Die Razor-Ansichts-Engine legt für expires-after
einen Standardwert von 20 Minuten fest.
expires-sliding
Attributtyp | Beispiel |
---|---|
TimeSpan |
@TimeSpan.FromSeconds(60) |
Legt die Zeit fest, nach der ein Cacheeintrag gelöscht werden soll, wenn niemand auf diesen Wert zugegriffen hat.
Beispiel:
<cache expires-sliding="@TimeSpan.FromSeconds(60)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-header
Attributtyp | Beispiele |
---|---|
String | User-Agent , User-Agent,content-encoding |
vary-by-header
akzeptiert eine durch Trennzeichen getrennte Liste von Headerwerten, die eine Cacheaktualisierung auslösen, wenn diese geändert werden.
Im folgenden Beispiel wird der Headerwert User-Agent
überwacht. Außerdem werden die Inhalte für alle User-Agent
zwischengespeichert, die dem Webserver präsentiert werden:
<cache vary-by-header="User-Agent">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-query
Attributtyp | Beispiele |
---|---|
String | Make , Make,Model |
vary-by-query
akzeptiert eine durch Kommas getrennte Liste von Keys in eine Abfragezeichenfolge (Query), die eine Cacheaktualisierung auslösen, wenn der Wert eines aufgeführten Schlüssels geändert wird.
Im folgenden Beispiel werden die Werte von Make
und Model
überwacht. Außerdem werden die Inhalte für alle Make
und Model
zwischengespeichert, die dem Webserver präsentiert werden:
<cache vary-by-query="Make,Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-route
Attributtyp | Beispiele |
---|---|
String | Make , Make,Model |
vary-by-route
akzeptiert eine durch Trennzeichen getrennte Liste mit Namen von Routenparametern, die eine Cacheaktualisierung auslösen, wenn der Routendatenparameter geändert wird.
Beispiel:
Startup.cs
:
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{Make?}/{Model?}");
Index.cshtml
:
<cache vary-by-route="Make,Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-cookie
Attributtyp | Beispiele |
---|---|
String | .AspNetCore.Identity.Application , .AspNetCore.Identity.Application,HairColor |
vary-by-cookie
akzeptiert eine durch Trennzeichen getrennte Liste mit cookie-Namen, die eine Cacheaktualisierung auslösen, wenn die cookie-Werte geändert werden.
Das folgende Beispiel überwacht das cookie, das der ASP.NET Core Identity zugeordnet ist. Wenn ein*e Benutzer*in authentifiziert ist, löst eine Änderung im Identitycookie eine Cacheaktualisierung aus:
<cache vary-by-cookie=".AspNetCore.Identity.Application">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-user
Attributtyp | Beispiele | Standard |
---|---|---|
Boolean | true , false |
true |
vary-by-user
gibt an, ob der Cache zurückgesetzt wird, wenn sich ein anderer Benutzer anmeldet, also der Kontextprinzipal geändert wird. Der aktuelle Benutzer oder die aktuelle Benutzerin wird auch als Anforderungskontextprinzipal bezeichnet und kann in einer Razor-Ansicht angezeigt werden, indem Sie auf @User.Identity.Name
verweisen.
Das folgende Beispiel überwacht den derzeit angemeldeten Benutzer, um eine Cacheaktualisierung auszulösen:
<cache vary-by-user="true">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
Wenn Sie dieses Attribut verwenden, werden die Inhalte im Cache über einen Anmelde- und Abmeldezyklus verwaltet. Wenn der Wert auf true
festgelegt wird, erklärt ein Authentifizierungszyklus den Cache für den authentifizierten Benutzer als ungültig. Der Cache wird für ungültig erklärt, da ein neuer eindeutiger cookie-Wert bei der Anmeldung generiert wird, wenn ein*e Benutzer*in authentifiziert wird. Der Cache wird für den Status „Anonym“ verwaltet, wenn kein cookie vorhanden oder das cookie abgelaufen ist. Wenn der Benutzer nicht authentifiziert ist, wird der Cache verwaltet.
vary-by
Attributtyp | Beispiel |
---|---|
String | @Model |
Über vary-by
können Sie festlegen, welche Daten zwischengespeichert werden sollen. Wenn das Objekt verändert wird, auf das der Zeichenfolgenwert des Attributs verweist, wird der Inhalt des Cache-Hilfsprogramms aktualisiert. Häufig wird eine Zeichenfolgenverkettung von Modellwerten diesem Attribut zugewiesen. Dies führt letztlich zu einem Szenario, bei dem der Cache ungültig wird, wenn ein Update an einem der verketteten Werte vorgenommen wird.
Bei dem folgenden Beispiel wird davon ausgegangen, dass die Controllermethode, die die Ansicht rendert, die ganzzahligen Werte der beiden Routenparameter myParam1
und myParam2
addiert, und die Summe als Modelleigenschaft zurückgibt. Wenn sich diese Summe ändert, wird auch der Inhalt des Cache-Taghilfsprogramms gerendert und erneut zwischengespeichert.
Aktion:
public IActionResult Index(string myParam1, string myParam2, string myParam3)
{
int num1;
int num2;
int.TryParse(myParam1, out num1);
int.TryParse(myParam2, out num2);
return View(viewName, num1 + num2);
}
Index.cshtml
:
<cache vary-by="@Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
Priorität
Attributtyp | Beispiele | Standard |
---|---|---|
CacheItemPriority |
High , Low , NeverRemove , Normal |
Normal |
priority
enthält Anweisungen zum Entfernen des Caches für den integrierten Cacheanbieter. Der Webserver entfernt Low
-Cacheeinträge erst, wenn der Arbeitsspeicher ausgelastet ist.
Beispiel:
<cache priority="High">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
Das priority
-Attribut garantiert keine festgelegte Ebene der Cachevermerkdauer. Bei CacheItemPriority
handelt es sich nur um einen Vorschlag. Wenn Sie dieses Attribut auf NeverRemove
festlegen, ist das noch keine Garantie dafür, dass zwischengespeicherte Elemente für immer gespeichert bleiben. Weitere Informationen finden Sie in den Themen im Abschnitt Weitere Ressourcen.
Das Cache-Taghilfsprogramm ist vom Arbeitsspeicher Cache Service abhängig. Das Cache-Taghilfsprogramm fügt den Dienst wenn nötig hinzu.