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>
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.

Zusätzliche Ressourcen