Verwendung des In-Memory-Caching in ASP.NET Core

ASP.NET Core ist ein schlankes und modulares Framework, mit dem leistungsstarke, moderne Webanwendungen unter Windows, Linux oder MacOS erstellt werden können. Im Gegensatz zu älterem ASP.NET verfügt ASP.NET Core über kein CacheObjekt. ASP.NET Core bietet jedoch Unterstützung für verschiedene Arten von Caching, einschließlich In-Memory-Caching, verteiltem Caching und Antwort-Caching.

In diesem Artikel wird erläutert, wie Sie die Leistung und Skalierbarkeit Ihrer ASP.NET Core-Anwendung verbessern können, indem Sie selten wechselnde Daten im speicherinternen Cache speichern. Wie immer werde ich Codebeispiele hinzufügen, um die diskutierten Konzepte zu veranschaulichen. 

So aktivieren Sie das In-Memory-Caching in ASP.NET Core

Der In-Memory-Cache in ASP.NET Core ist ein Dienst, den Sie mithilfe der Abhängigkeitsinjektion in Ihre Anwendung integrieren können. Nachdem Sie in Visual Studio ein ASP.NET Core-Projekt erstellt haben, können Sie den speicherinternen Cache in der ConfigureServicesMethode in der StartupKlasse aktivieren, wie im folgenden Codeausschnitt gezeigt.

public void ConfigureServices (IServiceCollection-Dienste)

{

    services.AddMvc ();

    services.AddMemoryCache ();

}}

Um mit dem In-Memory-Cache in ASP.NET Core arbeiten zu können, müssen Sie die IMemoryCacheSchnittstelle verwenden. So sieht es aus: 

öffentliche Schnittstelle IMemoryCache: IDisposable

{

    bool TryGetValue (Objektschlüssel, out Objektwert);

    ICacheEntry CreateEntry (Objektschlüssel);

    void Remove (Objektschlüssel);

}}

Sie können die IMemoryCachein der  ConfigServicesMethode mit der AddMemoryCacheoben untersuchten Methode registrieren . Anschließend sollten Sie das Cache-Objekt in den Konstruktor Ihrer Controller-Klasse einfügen, wie im folgenden Code-Snippet gezeigt.

  privater IMemoryCache-Cache;

  öffentlicher CacheController (IMemoryCache-Cache)

        {

            this.cache = cache;

        }}

Und das ist alles, was Sie tun müssen, um die Unterstützung für das In-Memory-Caching in Ihrer ASP.NET Core-Anwendung einzurichten. Im folgenden Abschnitt werden wir uns ansehen, wie wir mit der Cache-API in ASP.NET Core arbeiten können, um Objekte zu speichern und abzurufen.

Speichern und Abrufen von Objekten mit ASP.NET Core IMemoryCache

Um ein Objekt über die IMemoryCacheSchnittstelle zu speichern , müssen Sie die Set()im Code-Snippet unten gezeigte Methode verwenden. Beachten Sie, dass die Version der Set()in diesem Beispiel verwendeten Methode zwei Parameter akzeptiert. Der erste Parameter ist der Name des Schlüssels und der zweite Parameter ist der Wert, dh das Objekt, das im Cache gespeichert werden soll und mit dem Schlüssel identifiziert werden kann.

[HttpGet]

        öffentlicher String Get ()

        {

            cache.Set ("Key", DateTime.Now.ToString ());

            return "Dies ist eine Testmethode ...";

        }}

Um ein Element aus dem Cache abzurufen, können Sie die Get()unten gezeigte Methode nutzen.

  [HttpGet ("{key}")]

        public string Get (Zeichenfolgenschlüssel)

        {

            return cache.Get (Schlüssel);

        }}

Mit der TryGet()Methode für das Cache-Objekt können Sie überprüfen, ob der angegebene Schlüssel im Cache vorhanden ist. Hier ist die modifizierte Version unserer GetMethode, die zeigt, wie dies erreicht werden kann.

 [HttpGet]

        öffentlicher String Get ()

        {

            String-Schlüssel;

            string obj;

            if (! cache.TryGetValue (key, out obj))

            {

                obj = DateTime.Now.ToString ();

                cache.Set (key, obj);

            }}

            return obj;

        }}

Es gibt eine andere Methode, die aufgerufen GetOrCreatewird, um zwischengespeicherte Daten basierend auf dem bereitgestellten Schlüssel abzurufen. Wenn der Schlüssel nicht vorhanden ist, wird er von der Methode erstellt.

[HttpGet]

        öffentlicher String Get ()

        {

            return cache.GetOrCreate ("Schlüssel",

                cacheEntry => {

                            return DateTime.Now.ToString ();

                         });

        }}

Beachten Sie, dass eine asynchrone Version dieser Methode mit dem Namen verfügbar ist GetOrCreateAsync. Hier ist die vollständige Codeliste unserer CacheControllerKlasse als Referenz.

using System;

using Microsoft.AspNetCore.Mvc;

using Microsoft.Extensions.Caching.Memory;

Namespace InMemoryCaching.Controllers

{

    [Route ("api / [controller]")]

    öffentliche Klasse CacheController: Controller

    {

        privater IMemoryCache-Cache;

        öffentlicher CacheController (IMemoryCache-Cache)

        {

            this.cache = cache;

        }}

        [HttpGet]

        öffentlicher String Get ()

        {

            return cache.GetOrCreate ("Schlüssel",

                cacheEntry => {

                            return DateTime.Now.ToString ();

                         });

        }}

    }}

}}

Festlegen von Ablaufrichtlinien für zwischengespeicherte Daten in ASP.NET Core

Beachten Sie, dass Sie für Ihre zwischengespeicherten Daten absolute und gleitende Ablaufrichtlinien festlegen können. Während ersteres verwendet wird, um die Dauer anzugeben, für die sich ein Objekt im Cache befinden soll, wird letzteres verwendet, um die Dauer anzugeben, für die sich ein Objekt im Cache befindet, wenn keine Aktivität vorhanden ist, dh das Element wird entfernt der Cache, wenn die angegebene Dauer der Inaktivität abgelaufen ist.

Um Ablaufrichtlinien festzulegen, verwenden Sie die MemoryCacheEntryOptionsKlasse wie im folgenden Codeausschnitt gezeigt.

MemoryCacheEntryOptions cacheExpirationOptions = new MemoryCacheEntryOptions ();

cacheExpirationOptions.AbsoluteExpiration = DateTime.Now.AddMinutes (30);

cacheExpirationOptions.Priority = CacheItemPriority.Normal;

cache.Set ("Schlüssel", DateTime.Now.ToString (), cacheExpirationOptions);

Beachten Sie die Verwendung der PriorityEigenschaft für die MemoryCacheEntryOptions Instanz im obigen Codeausschnitt. Die PriorityEigenschaft gibt an, welche Objekte (basierend auf der bereits festgelegten Priorität) im Rahmen einer Laufzeitstrategie aus dem Cache entfernt werden sollen, um Speicher zurückzugewinnen, wenn auf dem Webserver nicht genügend Speicherplatz vorhanden ist.

Um die Priorität CacheItemPriorityfestzulegen , haben wir die Aufzählung verwendet. Dies kann einen dieser möglichen Werte haben: Niedrig, Normal, Hoch und Nie entfernen. Der speicherinterne Cache-Anbieter in ASP.NET Core entfernt Cache-Einträge unter Speicherdruck, es sei denn, Sie haben die Cache-Priorität auf festgelegt CacheItemPriority.NeverRemove.

Möglicherweise möchten Sie auch einen Rückruf registrieren, der ausgeführt wird, wenn ein Element aus dem Cache entfernt wird. Das folgende Codefragment zeigt, wie dies erreicht werden kann.

cacheExpirationOptions.RegisterPostEvictionCallback

(CacheItemChangedHandler, this);

Sie können sogar Abhängigkeiten zwischen den zwischengespeicherten Objekten festlegen. Beispielsweise möchten Sie möglicherweise bestimmte Elemente aus dem Cache entfernen, wenn ein verwandtes Element entfernt wurde. Wir werden diese und viele andere Funktionen des Caching in ASP.NET Core in meinen zukünftigen Beiträgen hier näher untersuchen. Bis dahin möchten Sie möglicherweise einen Blick auf die relevanten Seiten in der ASP.NET Core-Dokumentation von Microsoft werfen. 

So machen Sie mehr in ASP.NET und ASP.NET Core:

  • Verwendung des In-Memory-Caching in ASP.NET Core
  • Behandlung von Fehlern in der ASP.NET-Web-API
  • Übergeben mehrerer Parameter an Web-API-Controller-Methoden
  • So protokollieren Sie Anforderungs- und Antwortmetadaten in der ASP.NET-Web-API
  • So arbeiten Sie mit HttpModules in ASP.NET
  • Erweiterte Versionierung in der ASP.NET Core-Web-API
  • Verwendung der Abhängigkeitsinjektion in ASP.NET Core
  • So arbeiten Sie mit Sitzungen in ASP.NET
  • So arbeiten Sie mit HTTPHandlern in ASP.NET
  • Verwendung von IHostedService in ASP.NET Core
  • So verwenden Sie einen WCF-SOAP-Dienst in ASP.NET Core
  • So verbessern Sie die Leistung von ASP.NET Core-Anwendungen
  • So verwenden Sie eine ASP.NET Core-Web-API mit RestSharp
  • So arbeiten Sie mit der Protokollierung in ASP.NET Core
  • Verwendung von MediatR in ASP.NET Core
  • So arbeiten Sie mit dem Sitzungsstatus in ASP.NET Core
  • Verwendung von Nancy in ASP.NET Core
  • Grundlegendes zur Parameterbindung in der ASP.NET-Web-API
  • So laden Sie Dateien in ASP.NET Core MVC hoch
  • Implementieren der globalen Ausnahmebehandlung in der ASP.NET Core-Web-API
  • Implementieren von Integritätsprüfungen in ASP.NET Core
  • Best Practices für das Caching in ASP.NET
  • Verwendung von Apache Kafka Messaging in .NET
  • So aktivieren Sie CORS in Ihrer Web-API
  • Wann wird WebClient vs. HttpClient vs. HttpWebRequest verwendet?
  • So arbeiten Sie mit Redis Cache in .NET
  • Verwendung von Task.WaitAll vs. Task.WhenAll in .NET