Kako se koristi predmemoriranje u memoriji u ASP.NET Core

ASP.NET Core je lean i modularan okvir koji se može koristiti za izgradnju modernih web aplikacija visokih performansi na Windowsima, Linuxu ili MacOS-u. Za razliku od naslijeđenog ASP.NET-a, ASP.NET Core nema Cacheobjekt. Međutim, ASP.NET Core pruža podršku za nekoliko različitih vrsta predmemoriranja, uključujući predmemoriranje u memoriji, distribuirano predmemoriranje i predmemoriranje odgovora.

U ovom ćemo članku pogledati kako možete poboljšati performanse i skalabilnost svoje aplikacije ASP.NET Core pohranjivanjem rijetko mijenjajućih podataka u predmemoriju u memoriji. Kao i uvijek, uključit ću primjere koda kako bih ilustrirao raspravljene koncepte. 

Kako omogućiti predmemoriranje u memoriji u ASP.NET Core

Predmemorija u memoriji u ASP.NET Core usluga je koju možete ugraditi u svoju aplikaciju pomoću ubrizgavanja ovisnosti. Nakon što stvorite projekt ASP.NET Core u Visual Studio-u, možete omogućiti predmemoriju u memoriji u ConfigureServicesmetodi u Startupklasi kao što je prikazano u isječku koda u nastavku.

javna praznina ConfigureServices (usluge IServiceCollection)

{

    usluge.AddMvc ();

    usluge.AddMemoryCache ();

}

Da biste radili s predmemorijom u memoriji u ASP.NET Core, morate koristiti IMemoryCachesučelje. Evo kako to izgleda: 

javno sučelje IMemoryCache: IDisposable

{

    bool TryGetValue (ključ objekta, vrijednost objekta);

    ICacheEntry CreateEntry (objektni ključ);

    void Ukloni (objektni ključ);

}

Možete se registrirati IMemoryCacheConfigServicesmetodi pomoću AddMemoryCachegore opisane metode. Tada biste trebali ubrizgati objekt predmemorije u konstruktor vaše klase kontrolera, kao što je prikazano u isječku koda u nastavku.

  privatna predmemorija IMemoryCache;

  javni CacheController (IMemoryCache predmemorija)

        {

            this.cache = predmemorija;

        }

I to je sve što trebate učiniti da biste postavili podršku za predmemoriranje u memoriji u svojoj aplikaciji ASP.NET Core. U odjeljku koji slijedi pogledat ćemo kako možemo raditi s API-jem predmemorije u ASP.NET Core za spremanje i dohvaćanje objekata.

Kako pohraniti i dohvatiti objekte pomoću ASP.NET Core IMemoryCache

Da biste spremili objekt pomoću IMemoryCachesučelja, morate koristiti Set()metodu prikazanu u isječku koda u nastavku. Imajte na umu da verzija Set()metode koju smo koristili u ovom primjeru prihvaća dva parametra. Prvi parametar je ime ključa, a drugi parametar vrijednost, tj. Objekt koji treba pohraniti u predmemoriju koji se može identificirati pomoću ključa.

[HttpGet]

        javni niz Get ()

        {

            cache.Set (“Ključ”, DateTime.Now.ToString ());

            return "Ovo je metoda ispitivanja ...";

        }

Da biste dohvatili stavku iz predmemorije, možete iskoristiti Get()metodu prikazanu dolje.

  [HttpGet („{key}“)]

        javni niz Get (ključ niza)

        {

            return cache.Get (ključ);

        }

Pomoću TryGet()metode na objektu predmemorije možete provjeriti postoji li navedeni ključ u predmemoriji. Evo modificirane verzije naše Getmetode koja ilustrira kako se to može postići.

 [HttpGet]

        javni niz Get ()

        {

            niz ključa;

            niz obj;

            if (! cache.TryGetValue (ključ, van obj))

            {

                obj = DateTime.Now.ToString ();

                cache.Set (key, obj);

            }

            povratak obj;

        }

Postoji još jedna metoda, koja se naziva GetOrCreatei koja se može koristiti za dohvaćanje predmemoriranih podataka na temelju isporučenog ključa. Ako ključ ne postoji, metoda ga kreira.

[HttpGet]

        javni niz Get ()

        {

            return cache.GetOrCreate ("Ključ",

                cacheEntry => {

                            vrati DateTime.Now.ToString ();

                         });

        }

Imajte na umu da je dostupna asinkrona verzija ove metode koja se naziva GetOrCreateAsync. Ovdje je potpuni popis kodova naše CacheControllerklase za vašu referencu.

pomoću sustava;

pomoću Microsoft.AspNetCore.Mvc;

pomoću Microsoft.Extensions.Caching.Memory;

prostor imena InMemoryCaching.Controllers

{

    [Ruta („api / [kontroler]“)]

    javna klasa CacheController: kontroler

    {

        privatna predmemorija IMemoryCache;

        javni CacheController (IMemoryCache predmemorija)

        {

            this.cache = predmemorija;

        }

        [HttpGet]

        javni niz Get ()

        {

            return cache.GetOrCreate ("Ključ",

                cacheEntry => {

                            vrati DateTime.Now.ToString ();

                         });

        }

    }

}

Kako postaviti politike isteka za predmemorirane podatke u ASP.NET Core

Imajte na umu da na predmemoriranim podacima možete postaviti pravila apsolutnog i kliznog isteka. Dok se prvi koristi za određivanje trajanja tijekom kojeg objekt treba boraviti u predmemoriji, drugi se koristi za određivanje trajanja tijekom kojeg će objekt boraviti u predmemoriji kada nema aktivnosti - tj. predmemorija kad protekne određeno trajanje neaktivnosti.

Za postavljanje pravila isteka koristite MemoryCacheEntryOptionsklasu kao što je prikazano u isječku koda u nastavku.

MemoryCacheEntryOptions cacheExpirationOptions = novi MemoryCacheEntryOptions ();

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

cacheExpirationOptions.Priority = CacheItemPriority.Normal;

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

Obratite pažnju na upotrebu Prioritysvojstva na MemoryCacheEntryOptions instanci u isječku koda gore. U Priorityvlasništva propisuje objekata (na temelju prioriteta već postavili) treba ukloniti iz pohrane kao dio strategije izvođenja povratiti memoriju kad god je web poslužitelj ponestane memorije prostora.

Za postavljanje prioriteta koristili smo CacheItemPrioritynabrajanje. To može imati jednu od sljedećih mogućih vrijednosti: Low, Normal, High i NeverRemove. Dobavljač predmemorije u memoriji u ASP.NET Core uklonit će unose predmemorije kada je pod pritiskom memorije, osim ako niste postavili prioritet predmemorije CacheItemPriority.NeverRemove.

Možda ćete htjeti registrirati i povratni poziv koji će se izvršiti svaki put kad se stavka ukloni iz predmemorije. Sljedeći isječak koda ilustrira kako se to može postići.

cacheExpirationOptions.RegisterPostEvictionCallback

(CacheItemChangedHandler, ovo);

Možete čak postaviti i ovisnosti između predmemoriranih objekata. Kao primjer, možda ćete htjeti ukloniti određene stavke iz predmemorije ako je uklonjena neka povezana stavka. Dalje ćemo istražiti ovo i mnoge druge značajke predmemoriranja u ASP.NET Core u mojim budućim postovima ovdje. Do tada ćete možda htjeti pogledati relevantne stranice u Microsoftovoj ASP.NET Core dokumentaciji. 

Kako učiniti više u ASP.NET i ASP.NET Core:

  • Kako se koristi predmemoriranje u memoriji u ASP.NET Core
  • Kako postupati s pogreškama u ASP.NET web API-ju
  • Kako proslijediti više parametara metodama kontrolera Web API-ja
  • Kako prijaviti metapodatke zahtjeva i odgovora u ASP.NET Web API
  • Kako raditi s HttpModules-om u ASP.NET-u
  • Napredna verzija u ASP.NET Core Web API
  • Kako se koristi ubrizgavanje ovisnosti u ASP.NET Core
  • Kako raditi sa sesijama u ASP.NET-u
  • Kako raditi s HTTPHandlerima u ASP.NET-u
  • Kako koristiti IHostedService u ASP.NET Core
  • Kako potrošiti WCF SOAP uslugu u ASP.NET Core
  • Kako poboljšati izvedbu ASP.NET Core aplikacija
  • Kako konzumirati ASP.NET Core Web API pomoću RestSharp
  • Kako raditi s prijavom u ASP.NET Core
  • Kako koristiti MediatR u ASP.NET Core
  • Kako raditi sa stanjem sesije u ASP.NET Coreu
  • Kako koristiti Nancy u ASP.NET Coreu
  • Razumijevanje vezivanja parametara u ASP.NET Web API-ju
  • Kako prenijeti datoteke u ASP.NET Core MVC
  • Kako implementirati rukovanje globalnim iznimkama u ASP.NET Core Web API
  • Kako implementirati provjere zdravlja u ASP.NET Core
  • Najbolji primjeri u predmemoriranju u ASP.NET-u
  • Kako koristiti Apache Kafka razmjenu poruka u .NET-u
  • Kako omogućiti CORS na vašem web API-ju
  • Kada koristiti WebClient u odnosu na HttpClient u odnosu na HttpWebRequest
  • Kako raditi s predmemorijom Redis u .NET-u
  • Kada koristiti Task.WaitAll vs. Task.WhenAll u .NET