Programmering

Hvordan bruke hurtigbufring i minnet i ASP.NET Core

ASP.NET Core er et magert og modulært rammeverk som kan brukes til å bygge høyytelses, moderne webapplikasjoner på Windows, Linux eller MacOS. I motsetning til eldre ASP.NET har ASP.NET Core ikke en Cache gjenstand. ASP.NET Core gir imidlertid støtte for flere forskjellige typer hurtigbufring, inkludert hurtigbufring i minnet, distribuert caching og responsbufring.

I denne artikkelen vil vi se på hvordan du kan øke ytelsen og skalerbarheten til ASP.NET Core-applikasjonen ved å lagre sjeldent endrede data i minnebufferen. Som alltid vil jeg ta med kodeeksempler for å illustrere begrepene som er diskutert.

Hvordan aktivere hurtigbufring i minnet i ASP.NET Core

Hukommelsesbufferen i ASP.NET Core er en tjeneste du kan innlemme i applikasjonen din ved hjelp av avhengighetsinjeksjon. Når du har opprettet et ASP.NET Core-prosjekt i Visual Studio, kan du aktivere hurtigbufferen i minnet ConfigureServices metoden i Oppstart klasse som vist i kodebiten nedenfor.

offentlig ugyldighet ConfigureServices (IServiceCollection-tjenester)

{

services.AddMvc ();

services.AddMemoryCache ();

}

For å jobbe med minnebufferen i ASP.NET Core, må du bruke IMemoryCache grensesnitt. Slik ser det ut:

offentlig grensesnitt IMemoryCache: IDisposable

{

bool TryGetValue (objektnøkkel, ut objektverdi);

ICacheEntry CreateEntry (objektnøkkel);

ugyldig Fjern (objektnøkkel);

}

Du kan registrere IMemoryCache iConfigServices metoden ved hjelp av AddMemoryCache metode vi undersøkte ovenfor. Deretter bør du injisere hurtigbufferobjektet i konstruktøren til kontrollerklassen din, som vist i kodebiten nedenfor.

  privat IMemoryCache cache;

offentlig CacheController (IMemoryCache cache)

        {

this.cache = cache;

        }

Og det er alt du trenger å gjøre for å sette opp støtte for hurtigbufring i minnet i ASP.NET Core-applikasjonen. I delen som følger, vil vi se på hvordan vi kan jobbe med cache-API i ASP.NET Core for å lagre og hente gjenstander.

Hvordan lagre og hente gjenstander ved hjelp av ASP.NET Core IMemoryCache

For å lagre et objekt ved hjelp av IMemoryCache grensesnittet du trenger for å bruke Sett() metode som vist i kodebiten nedenfor. Merk at versjonen av Sett() metoden vi har brukt i dette eksemplet godtar to parametere. Den første parameteren er navnet på nøkkelen og den andre parameteren er verdien, dvs. objektet som skal lagres i hurtigbufferen som kan identifiseres ved hjelp av nøkkelen.

[HttpGet]

offentlig streng Get ()

        {

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

return “Dette er en testmetode ...”;

        }

For å hente et element fra hurtigbufferen, kan du dra nytte av Få() metoden som vist nedenfor.

  [HttpGet (“{key}”)]

offentlig streng Get (strengnøkkel)

        {

return cache.Get (nøkkel);

        }

Du kan bruke TryGet () metode på hurtigbufferobjektet for å sjekke om den angitte nøkkelen finnes i hurtigbufferen. Her er den modifiserte versjonen av vår metode som illustrerer hvordan dette kan oppnås.

 [HttpGet]

offentlig streng Get ()

        {

streng nøkkel;

streng obj;

hvis (! cache.TryGetValue (nøkkel, ut obj))

            {

obj = DateTime.Now.ToString ();

cache.Sett (nøkkel, obj);

            }

retur obj;

        }

Det er en annen metode, kalt GetOrCreate, som kan brukes til å hente hurtigbufrede data basert på nøkkelen som er gitt. Hvis nøkkelen ikke eksisterer, skaper metoden den.

[HttpGet]

offentlig streng Get ()

        {

return cache.GetOrCreate (“Key”,

cacheEntry => {

return DateTime.Now.ToString ();

                         });

        }

Merk at en asynkron versjon av denne metoden er tilgjengelig kalt GetOrCreateAsync. Her er den komplette kodelisten til vår CacheController klasse for din referanse.

bruker System;

ved hjelp av Microsoft.AspNetCore.Mvc;

ved hjelp av Microsoft.Extensions.Caching.Memory;

namespace InMemoryCaching.Controllers

{

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

offentlig klasse CacheController: Controller

    {

privat IMemoryCache cache;

offentlig CacheController (IMemoryCache cache)

        {

this.cache = cache;

        }

[HttpGet]

offentlig streng Get ()

        {

return cache.GetOrCreate (“Key”,

cacheEntry => {

return DateTime.Now.ToString ();

                         });

        }

    }

}

Hvordan angi utløpsretningslinjer for hurtigbufrede data i ASP.NET Core

Merk at du kan angi absolutt og glidende utløpsretningslinjer for hurtigbufrede data. Mens førstnevnte brukes til å spesifisere varigheten et objekt skal ligge i hurtigbufferen, brukes sistnevnte til å spesifisere hvor lenge et objekt skal ligge i hurtigbufferen når det ikke er aktivitet - dvs. elementet vil bli fjernet fra hurtigbufferen når den angitte varigheten av inaktivitet utløper.

For å angi utløpsregler, bruker du MemoryCacheEntryOptions klasse som vist i kodebiten nedenfor.

MemoryCacheEntryOptions cacheExpirationOptions = ny MemoryCacheEntryOptions ();

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

cacheExpirationOptions.Priority = CacheItemPriority.Normal;

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

Legg merke til bruken av Prioritet eiendom på MemoryCacheEntryOptions forekomst i kodebiten ovenfor. De Prioritet egenskap spesifiserer hvilke objekter (basert på prioriteten som allerede er angitt) som skal fjernes fra hurtigbufferen som en del av en strategi for kjøretiden for å gjenvinne minne når webserveren går tom for minne.

For å sette prioritet brukte vi CacheItemPriority enum. Dette kan ha en av disse mulige verdiene: Lav, Normal, Høy og Fjern aldri. Cache-leverandøren i minnet i ASP.NET Core fjerner cacheoppføringer når de er under minnetrykk, med mindre du har satt hurtigbufferprioriteten til CacheItemPriority.NeverRemove.

Det kan også være lurt å registrere en tilbakeringing som skal utføres når et element fjernes fra hurtigbufferen. Følgende kodebit illustrerer hvordan dette kan oppnås.

cacheExpirationOptions.RegisterPostEvictionCallback

(CacheItemChangedHandler, dette);

Du kan til og med angi avhengigheter mellom de bufrede objektene. Som et eksempel vil du kanskje fjerne visse elementer fra hurtigbufferen hvis noe relatert element er fjernet. Vi vil utforske dette videre og mange andre funksjoner ved caching i ASP.NET Core i mine fremtidige innlegg her. Inntil da kan det være lurt å se på de aktuelle sidene i Microsofts ASP.NET Core-dokumentasjon.

Hvordan gjøre mer i ASP.NET og ASP.NET Core:

  • Hvordan bruke hurtigbufring i minnet i ASP.NET Core
  • Hvordan håndtere feil i ASP.NET Web API
  • Hvordan overføre flere parametere til Web API-kontrollermetoder
  • Hvordan logge forespørsels- og svarmetadata i ASP.NET Web API
  • Hvordan jobbe med HttpModules i ASP.NET
  • Avansert versjonering i ASP.NET Core Web API
  • Hvordan bruke avhengighetsinjeksjon i ASP.NET Core
  • Hvordan jobbe med økter i ASP.NET
  • Hvordan jobbe med HTTPHandlers i ASP.NET
  • Hvordan bruke IHostedService i ASP.NET Core
  • Hvordan forbruke en WCF SOAP-tjeneste i ASP.NET Core
  • Hvordan forbedre ytelsen til ASP.NET Core-applikasjoner
  • Slik bruker du et ASP.NET Core Web API ved hjelp av RestSharp
  • Hvordan jobbe med innlogging i ASP.NET Core
  • Hvordan bruke MediatR i ASP.NET Core
  • Hvordan jobbe med økttilstand i ASP.NET Core
  • Hvordan bruke Nancy i ASP.NET Core
  • Forstå parameterinnbinding i ASP.NET Web API
  • Hvordan laste opp filer i ASP.NET Core MVC
  • Hvordan implementere global unntaksbehandling i ASP.NET Core Web API
  • Hvordan implementere helsesjekker i ASP.NET Core
  • Beste fremgangsmåter for hurtigbufring i ASP.NET
  • Hvordan bruke Apache Kafka-meldinger i .NET
  • Hvordan aktivere CORS på web-API-et
  • Når skal du bruke WebClient vs. HttpClient vs. HttpWebRequest
  • Hvordan jobbe med Redis Cache i .NET
  • Når skal jeg bruke Task.WaitAll vs. Task.WhenAll i .NET
$config[zx-auto] not found$config[zx-overlay] not found