Как да използвам кеширането в паметта в ASP.NET Core

ASP.NET Core е стройна и модулна рамка, която може да се използва за изграждане на високопроизводителни, модерни уеб приложения на Windows, Linux или MacOS. За разлика от наследения ASP.NET, ASP.NET Core няма Cacheобект. ASP.NET Core обаче осигурява поддръжка за няколко различни вида кеширане, включително кеширане в паметта, разпределено кеширане и кеширане на отговори.

В тази статия ще разгледаме как можете да подобрите производителността и мащабируемостта на вашето приложение ASP.NET Core, като съхранявате рядко променящи се данни в кеша в паметта. Както винаги, ще включа примери за кодове, за да илюстрирам обсъжданите концепции. 

Как да активирам кеширането в паметта в ASP.NET Core

Кешът в паметта в ASP.NET Core е услуга, която можете да включите във вашето приложение, използвайки инжектиране на зависимости. След като създадете проект на ASP.NET Core в Visual Studio, можете да активирате кеша в паметта в ConfigureServicesметода в Startupкласа, както е показано в кодовия фрагмент по-долу.

публична невалидна ConfigureServices (услуги на IServiceCollection)

{

    услуги.AddMvc ();

    services.AddMemoryCache ();

}

За да работите с кеша в паметта в ASP.NET Core, трябва да използвате IMemoryCacheинтерфейса. Ето как изглежда: 

публичен интерфейс IMemoryCache: IDisposable

{

    bool TryGetValue (обект ключ, стойност на обекта);

    ICacheEntry CreateEntry (обектен ключ);

    void Remove (обект ключ);

}

Можете да регистрирате IMemoryCacheв  ConfigServicesметода, използвайки AddMemoryCacheметода, който разгледахме по-горе. След това трябва да инжектирате кеш обекта в конструктора на вашия клас контролер, както е показано в кодовия фрагмент по-долу.

  частен кеш на IMemoryCache;

  публичен CacheController (кеш IMemoryCache)

        {

            this.cache = кеш;

        }

И това е всичко, което трябва да направите, за да настроите поддръжка за кеширане в паметта във вашето приложение ASP.NET Core. В раздела, който следва, ще разгледаме как можем да работим с API на кеша в ASP.NET Core за съхраняване и извличане на обекти.

Как да съхранявате и извличате обекти с помощта на ASP.NET Core IMemoryCache

За да съхраните обект с помощта на IMemoryCacheинтерфейса, трябва да използвате Set()метода, както е показано в кодовия фрагмент по-долу. Обърнете внимание, че версията на Set()метода, която използвахме в този пример, приема два параметъра. Първият параметър е името на ключа, а вторият параметър е стойността, т.е. обектът, който трябва да се съхранява в кеша, който може да бъде идентифициран с помощта на ключа.

[HttpGet]

        публичен низ Get ()

        {

            cache.Set („Ключ“, DateTime.Now.ToString ());

            return „Това е метод за изпитване ...“;

        }

За да извлечете елемент от кеша, можете да се възползвате от Get()метода, както е показано по-долу.

  [HttpGet („{ключ}“)]

        публичен низ Get (низ ключ)

        {

            return cache.Get (ключ);

        }

Можете да използвате TryGet()метода на кеш обекта, за да проверите дали посоченият ключ съществува в кеша. Ето модифицираната версия на нашия Getметод, която илюстрира как това може да се постигне.

 [HttpGet]

        публичен низ Get ()

        {

            низ ключ;

            низ obj;

            if (! cache.TryGetValue (ключ, out obj))

            {

                obj = DateTime.Now.ToString ();

                cache.Set (ключ, obj);

            }

            return obj;

        }

Има и друг метод, наречен GetOrCreate, който може да се използва за извличане на кеширани данни въз основа на предоставения ключ. Ако ключът не съществува, методът го създава.

[HttpGet]

        публичен низ Get ()

        {

            return cache.GetOrCreate („Ключ“,

                cacheEntry => {

                            върнете DateTime.Now.ToString ();

                         });

        }

Имайте предвид, че се предлага асинхронна версия на този метод, наречена GetOrCreateAsync. Ето пълния списък с кодове на нашия CacheControllerклас за справка.

използване на система;

използване на Microsoft.AspNetCore.Mvc;

използване на Microsoft.Extensions.Caching.Memory;

пространство от имена InMemoryCaching.Controllers

{

    [Маршрут („api / [контролер]“)]

    публичен клас CacheController: Контролер

    {

        частен кеш на IMemoryCache;

        публичен CacheController (кеш IMemoryCache)

        {

            this.cache = кеш;

        }

        [HttpGet]

        публичен низ Get ()

        {

            return cache.GetOrCreate („Ключ“,

                cacheEntry => {

                            върнете DateTime.Now.ToString ();

                         });

        }

    }

}

Как да зададете политики за изтичане на кеширани данни в ASP.NET Core

Имайте предвид, че можете да зададете абсолютни и плъзгащи се политики за изтичане на вашите кеширани данни. Докато първият се използва за указване на продължителността, за която обектът трябва да се намира в кеша, вторият се използва за указване на продължителността, през който обектът ще се намира в кеша, когато няма активност - т.е. елементът ще бъде премахнат от кеша, когато изтече определената продължителност на неактивност.

За да зададете правила за изтичане, използвате MemoryCacheEntryOptionsкласа, както е показано в кодовия фрагмент по-долу.

MemoryCacheEntryOptions cacheExpirationOptions = нов MemoryCacheEntryOptions ();

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

cacheExpirationOptions.Priority = CacheItemPriority.Normal;

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

Обърнете внимание на използването на Priorityсвойството на MemoryCacheEntryOptions екземпляра в кодовия фрагмент по-горе. На Priorityуточнява собственост, които обекти (въз основа на приоритета вече е) трябва да бъдат отстранени от кеша, като част от стратегията на издръжливостта й да си върне паметта винаги на уеб сървъра свърши по памет.

За да зададем приоритета, използвахме CacheItemPriorityизброяването. Това може да има една от следните възможни стойности: Low, Normal, High и NeverRemove. Доставчикът на кеш памет в ASP.NET Core ще премахне записите в кеша, когато е под натиск на паметта, освен ако не сте задали приоритета на кеша CacheItemPriority.NeverRemove.

Може също да поискате да регистрирате обратно повикване, което ще се изпълни всеки път, когато елемент бъде премахнат от кеша. Следният кодов фрагмент илюстрира как това може да се постигне.

cacheExpirationOptions.RegisterPostEvictionCallback

(CacheItemChangedHandler, това);

Можете дори да задавате зависимости между кешираните обекти. Като пример може да искате да премахнете определени елементи от кеша, ако е свързан някакъв свързан елемент. Ще проучим това по-нататък и много други функции на кеширането в ASP.NET Core в следващите ми публикации тук. Дотогава може да искате да разгледате съответните страници в документацията на Microsoft за ASP.NET Core. 

Как да направите повече в ASP.NET и ASP.NET Core:

  • Как да използвам кеширането в паметта в ASP.NET Core
  • Как да се справим с грешки в ASP.NET Web API
  • Как да предавам множество параметри на методите на контролера на Web API
  • Как да регистрирам метаданни за заявки и отговори в ASP.NET Web API
  • Как да работя с HttpModules в ASP.NET
  • Разширено създаване на версии в ASP.NET Core Web API
  • Как да използвам инжектиране на зависимост в ASP.NET Core
  • Как да работите със сесии в ASP.NET
  • Как да работя с HTTPHandlers в ASP.NET
  • Как да използвам IHostedService в ASP.NET Core
  • Как да консумираме услуга WCF SOAP в ASP.NET Core
  • Как да подобрите производителността на приложенията на ASP.NET Core
  • Как да консумирате ASP.NET Core Web API с помощта на RestSharp
  • Как да работя с регистриране в ASP.NET Core
  • Как да използвам MediatR в ASP.NET Core
  • Как да работите със състоянието на сесията в ASP.NET Core
  • Как да използвам Nancy в ASP.NET Core
  • Разберете обвързването на параметри в ASP.NET Web API
  • Как да качвате файлове в ASP.NET Core MVC
  • Как да приложим обработка на глобални изключения в ASP.NET Core Web API
  • Как да приложим проверки на състоянието в ASP.NET Core
  • Най-добри практики за кеширане в ASP.NET
  • Как да използвам съобщенията на Apache Kafka в .NET
  • Как да активирате CORS на вашия уеб API
  • Кога да се използва WebClient срещу HttpClient срещу HttpWebRequest
  • Как да работите с Redis Cache в .NET
  • Кога да използвате Task.WaitAll срещу Task.WhenAll в .NET