Programmering

Sådan bruges cache i hukommelsen i ASP.NET Core

ASP.NET Core er en slank og modulær ramme, der kan bruges til at opbygge højtydende, moderne webapplikationer på Windows, Linux eller MacOS. I modsætning til ældre ASP.NET har ASP.NET Core ikke en Cache objekt. ASP.NET Core yder imidlertid support til flere forskellige typer caching inklusive cache i hukommelse, distribueret caching og responscaching.

I denne artikel ser vi på, hvordan du kan øge din ASP.NET Core-applikations ydeevne og skalerbarhed ved at gemme sjældent ændrede data i cache i hukommelsen. Som altid vil jeg inkludere kodeeksempler for at illustrere de diskuterede begreber.

Sådan aktiveres caching i hukommelsen i ASP.NET Core

In-memory cache i ASP.NET Core er en tjeneste, som du kan indarbejde i din applikation ved hjælp af afhængighedsinjektion. Når du har oprettet et ASP.NET Core-projekt i Visual Studio, kan du aktivere cache i hukommelsen i ConfigureServices metode i Start op klasse som vist i kodestykket nedenfor.

offentlig ugyldighed ConfigureServices (IServiceCollection-tjenester)

{

services.AddMvc ();

services.AddMemoryCache ();

}

For at arbejde med cache i hukommelsen i ASP.NET Core skal du bruge IMemoryCache interface. Sådan ser det ud:

offentlig grænseflade IMemoryCache: IDisposable

{

bool TryGetValue (objektnøgle, ud objektværdi);

ICacheEntry CreateEntry (objektnøgle);

ugyldig Fjern (objektnøgle);

}

Du kan registrere IMemoryCache iConfigServices metode ved hjælp af AddMemoryCache metode, vi undersøgte ovenfor. Derefter skal du indsprøjte cache-objektet i konstruktøren af ​​din controller-klasse som vist i kodestykket nedenfor.

  privat IMemoryCache cache;

offentlig CacheController (IMemoryCache cache)

        {

this.cache = cache;

        }

Og det er alt hvad du skal gøre for at oprette understøttelse af cache i hukommelsen i din ASP.NET Core-applikation. I det følgende afsnit vil vi se på, hvordan vi kan arbejde med cache-API'en i ASP.NET Core for at gemme og hente objekter.

Sådan gemmes og hentes objekter ved hjælp af ASP.NET Core IMemoryCache

At gemme et objekt ved hjælp af IMemoryCache interface, du skal bruge Sæt() metode som vist i kodestykket nedenfor. Bemærk, at versionen af Sæt() metode, vi har brugt i dette eksempel, accepterer to parametre. Den første parameter er navnet på nøglen, og den anden parameter er værdien, dvs. objektet, der skal gemmes i cachen, der kan identificeres ved hjælp af nøglen.

[HttpGet]

public string Get ()

        {

cache.Set ("Nøgle", DateTime.Now.ToString ());

return “Dette er en testmetode ...”;

        }

For at hente et element fra cachen kan du drage fordel af Få() metode som vist nedenfor.

  [HttpGet (“{key}”)]

offentlig streng Get (streng nøgle)

        {

returner cache.Get (nøgle);

        }

Du kan bruge TryGet () metode på cache-objektet for at kontrollere, om den angivne nøgle findes i cachen. Her er den ændrede version af vores metode, der illustrerer, hvordan dette kan opnås.

 [HttpGet]

public string Get ()

        {

streng nøgle;

streng obj;

hvis (! cache.TryGetValue (nøgle, ud obj))

            {

obj = DateTime.Now.ToString ();

cache.Set (nøgle, obj);

            }

returnere obj;

        }

Der er en anden metode, kaldet GetOrCreate, der kan bruges til at hente cachelagrede data baseret på den medfølgende nøgle. Hvis nøglen ikke findes, opretter metoden den.

[HttpGet]

public string Get ()

        {

returner cache.GetOrCreate ("Nøgle",

cacheEntry => {

returnere DateTime.Now.ToString ();

                         });

        }

Bemærk, at der kaldes en asynkron version af denne metode GetOrCreateAsync. Her er den komplette kodeliste over vores CacheController klasse til din reference.

ved hjælp af System;

ved hjælp af Microsoft.AspNetCore.Mvc;

ved hjælp af Microsoft.Extensions.Caching.Memory;

navneområde InMemoryCaching.Controllers

{

[Rute (“api / [controller]”)]

offentlig klasse CacheController: Controller

    {

privat IMemoryCache cache;

offentlig CacheController (IMemoryCache cache)

        {

this.cache = cache;

        }

[HttpGet]

public string Get ()

        {

returner cache.GetOrCreate ("Nøgle",

cacheEntry => {

returnere DateTime.Now.ToString ();

                         });

        }

    }

}

Sådan indstilles udløbspolitikker for cachelagrede data i ASP.NET Core

Bemærk, at du kan indstille absolutte og glidende udløbspolitikker på dine cachelagrede data. Mens førstnævnte bruges til at specificere varigheden for et objekt, der skal opholde sig i cachen, bruges sidstnævnte til at specificere varigheden, som et objekt skal opholde sig i cachen, når der ikke er nogen aktivitet - dvs. elementet fjernes fra cachen, når den angivne varighed af inaktivitet udløber.

For at indstille udløbspolitikker bruger du MemoryCacheEntryOptions klasse som vist i kodestykket nedenfor.

MemoryCacheEntryOptions cacheExpirationOptions = ny MemoryCacheEntryOptions ();

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

cacheExpirationOptions.Priority = CacheItemPriority.Normal;

cache.Set (“Key”, DateTime.Now.ToString (), cacheExpirationOptions);

Bemærk brugen af Prioritet ejendom på MemoryCacheEntryOptions forekomst i kodestykket ovenfor. Det Prioritet egenskab angiver, hvilke objekter (baseret på den allerede indstillede prioritet), der skal fjernes fra cachen som en del af en runtime-strategi for at genvinde hukommelse, når webserveren løber tør for hukommelsesplads.

For at indstille prioriteten brugte vi CacheItemPrioritet enum. Dette kan have en af ​​disse mulige værdier: Lav, Normal, Høj og Fjern aldrig. In-memory cache-udbyderen i ASP.NET Core fjerner cache-poster, når de er under hukommelsestryk, medmindre du har indstillet cache-prioriteten til CacheItemPriority.NeverRemove.

Du vil muligvis også registrere et tilbagekald, der udføres, hver gang et element fjernes fra cachen. Følgende kodestykke illustrerer, hvordan dette kan opnås.

cacheExpirationOptions.RegisterPostEvictionCallback

(CacheItemChangedHandler, dette);

Du kan endda indstille afhængigheder mellem de cachelagrede objekter. Som et eksempel vil du måske fjerne bestemte emner fra cachen, hvis et relateret emne er blevet fjernet. Vi vil undersøge dette yderligere og mange andre funktioner i caching i ASP.NET Core i mine fremtidige indlæg her. Indtil da vil du måske se på de relevante sider i Microsofts ASP.NET Core-dokumentation.

Sådan gør du mere i ASP.NET og ASP.NET Core:

  • Sådan bruges cache i hukommelsen i ASP.NET Core
  • Sådan håndteres fejl i ASP.NET Web API
  • Sådan overføres flere parametre til Web API-controller-metoder
  • Sådan logges anmodnings- og svarmetadata i ASP.NET Web API
  • Sådan arbejder du med HttpModules i ASP.NET
  • Avanceret versionering i ASP.NET Core Web API
  • Sådan bruges afhængighedsinjektion i ASP.NET Core
  • Sådan arbejder du med sessioner i ASP.NET
  • Sådan arbejder du med HTTPHandlers i ASP.NET
  • Sådan bruges IHostedService i ASP.NET Core
  • Sådan forbruges en WCF SOAP-tjeneste i ASP.NET Core
  • Sådan forbedres ydeevnen for ASP.NET Core-applikationer
  • Sådan forbruges en ASP.NET Core Web API ved hjælp af RestSharp
  • Sådan arbejder du med logning i ASP.NET Core
  • Sådan bruges MediatR i ASP.NET Core
  • Sådan arbejder du med sessionstilstand i ASP.NET Core
  • Sådan bruges Nancy i ASP.NET Core
  • Forstå parameterbinding i ASP.NET Web API
  • Sådan uploades filer i ASP.NET Core MVC
  • Sådan implementeres global undtagelseshåndtering i ASP.NET Core Web API
  • Sådan implementeres sundhedstjek i ASP.NET Core
  • Bedste fremgangsmåder inden caching i ASP.NET
  • Sådan bruges Apache Kafka-meddelelser i .NET
  • Sådan aktiveres CORS på din web-API
  • Hvornår skal man bruge WebClient vs. HttpClient vs. HttpWebRequest
  • Sådan arbejder du med Redis Cache i .NET
  • Hvornår skal man bruge Task.WaitAll vs. Task.WhenAll i .NET