ASP.NET Core에서 메모리 내 캐싱을 사용하는 방법

ASP.NET Core는 Windows, Linux 또는 MacOS에서 고성능 최신 웹 애플리케이션을 빌드하는 데 사용할 수있는 린 (lean) 및 모듈 식 프레임 워크입니다. 레거시 ASP.NET과 달리 ASP.NET Core에는 Cache개체 가 없습니다 . 그러나 ASP.NET Core는 메모리 내 캐싱, 분산 캐싱 및 응답 캐싱을 포함하여 여러 유형의 캐싱을 지원합니다.

이 문서에서는 드물게 변경되는 데이터를 메모리 내 캐시에 저장하여 ASP.NET Core 애플리케이션의 성능과 확장 성을 높이는 방법을 살펴 봅니다. 항상 그렇듯이 논의 된 개념을 설명하기 위해 코드 예제를 포함하겠습니다. 

ASP.NET Core에서 메모리 내 캐싱을 활성화하는 방법

ASP.NET Core의 메모리 내 캐시는 종속성 주입을 사용하여 애플리케이션에 통합 할 수있는 서비스입니다. Visual Studio에서 ASP.NET Core 프로젝트를 만든 후에는 아래 코드 조각에 표시된대로 클래스 의 ConfigureServices메서드에서 메모리 내 캐시를 활성화 할 수 Startup있습니다.

public void ConfigureServices (IServiceCollection 서비스)

{

    services.AddMvc ();

    services.AddMemoryCache ();

}

ASP.NET Core에서 메모리 내 캐시로 작업하려면 IMemoryCache인터페이스 를 사용해야합니다 . 어떻게 보이는지 : 

공용 인터페이스 IMemoryCache : IDisposable

{

    bool TryGetValue (개체 키, 개체 값 출력);

    ICacheEntry CreateEntry (개체 키);

    void Remove (객체 키);

}

위에서 살펴본 방법을 사용하여 메서드 IMemoryCache에  를 등록 할 수 있습니다 . 그런 다음 아래 코드 조각에 표시된대로 컨트롤러 클래스의 생성자에 캐시 개체를 삽입해야합니다.ConfigServicesAddMemoryCache

  개인 IMemoryCache 캐시;

  공용 CacheController (IMemoryCache 캐시)

        {

            this.cache = 캐시;

        }

그리고 이것이 ASP.NET Core 애플리케이션에서 메모리 내 캐싱에 대한 지원을 설정하는 데 필요한 모든 것입니다. 다음 섹션에서는 ASP.NET Core에서 캐시 API를 사용하여 개체를 저장하고 검색하는 방법을 살펴 봅니다.

ASP.NET Core IMemoryCache를 사용하여 개체를 저장하고 검색하는 방법

IMemoryCache인터페이스를 사용하여 객체를 저장하려면 Set()아래 코드 스 니펫에 표시된 메소드 를 사용해야합니다 . Set()이 예제에서 사용한 메서드 의 버전 은 두 개의 매개 변수를 허용합니다. 첫 번째 매개 변수는 키의 이름이고 두 번째 매개 변수는 값, 즉 키를 사용하여 식별 할 수있는 캐시에 저장 될 객체입니다.

[HttpGet]

        공용 문자열 Get ()

        {

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

            return“이것은 테스트 방법입니다 ...”;

        }

캐시에서 항목을 검색하려면 Get()아래와 같은 방법을 사용할 수 있습니다.

  [HttpGet ( "{key}")]

        공개 문자열 Get (문자열 키)

        {

            return cache.Get (key);

        }

TryGet()캐시 개체 의 메서드를 사용하여 지정된 키가 캐시에 있는지 확인할 수 있습니다. Get이것이 어떻게 달성 될 수 있는지를 보여주는 우리 방법 의 수정 된 버전입니다 .

 [HttpGet]

        공용 문자열 Get ()

        {

            문자열 키;

            문자열 obj;

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

            {

                obj = DateTime.Now.ToString ();

                cache.Set (key, obj);

            }

            반환 obj;

        }

GetOrCreate제공된 키를 기반으로 캐시 된 데이터를 검색하는 데 사용할 수있는 라는 또 다른 메서드 가 있습니다. 키가 없으면 메서드가 키를 만듭니다.

[HttpGet]

        공용 문자열 Get ()

        {

            return cache.GetOrCreate ( "Key",

                cacheEntry => {

                            return DateTime.Now.ToString ();

                         });

        }

이 메서드의 비동기 버전은 GetOrCreateAsync. 다음은 CacheController참조 할 수 있도록 클래스 의 전체 코드 목록입니다 .

시스템 사용;

Microsoft.AspNetCore.Mvc 사용;

Microsoft.Extensions.Caching.Memory 사용;

네임 스페이스 InMemoryCaching.Controllers

{

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

    공용 클래스 CacheController : 컨트롤러

    {

        개인 IMemoryCache 캐시;

        공용 CacheController (IMemoryCache 캐시)

        {

            this.cache = 캐시;

        }

        [HttpGet]

        공용 문자열 Get ()

        {

            return cache.GetOrCreate ( "Key",

                cacheEntry => {

                            return DateTime.Now.ToString ();

                         });

        }

    }

}

ASP.NET Core에서 캐시 된 데이터에 만료 정책을 설정하는 방법

캐시 된 데이터에 절대 및 슬라이딩 만료 정책을 설정할 수 있습니다. 전자는 객체가 캐시에 상주해야하는 기간을 지정하는 데 사용되는 반면, 후자는 활동이 없을 때 객체가 캐시에 상주 할 기간을 지정하는 데 사용됩니다. 즉, 항목이 지정된 비활성 기간이 경과 할 때 캐시

만료 정책을 설정하려면 MemoryCacheEntryOptions아래 코드 스 니펫에 표시된 클래스 를 사용합니다 .

MemoryCacheEntryOptions cacheExpirationOptions = new 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의 메모리 내 캐시 공급자는 캐시 우선 순위를 .NET으로 설정하지 않는 한 메모리 부족시 캐시 항목을 제거합니다 CacheItemPriority.NeverRemove.

캐시에서 항목이 제거 될 때마다 실행되는 콜백을 등록 할 수도 있습니다. 다음 코드 스 니펫은이를 달성하는 방법을 보여줍니다.

cacheExpirationOptions.RegisterPostEvictionCallback

(CacheItemChangedHandler, this);

캐시 된 개체간에 종속성을 설정할 수도 있습니다. 예를 들어, 일부 관련 항목이 제거 된 경우 캐시에서 특정 항목을 제거 할 수 있습니다. 여기에있는 향후 게시물에서이 기능과 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에서 요청 및 응답 메타 데이터를 기록하는 방법
  • ASP.NET에서 HttpModules를 사용하는 방법
  • ASP.NET Core Web API의 고급 버전 관리
  • ASP.NET Core에서 종속성 주입을 사용하는 방법
  • ASP.NET에서 세션으로 작업하는 방법
  • ASP.NET에서 HTTPHandler를 사용하는 방법
  • ASP.NET Core에서 IHostedService를 사용하는 방법
  • ASP.NET Core에서 WCF SOAP 서비스를 사용하는 방법
  • ASP.NET Core 애플리케이션의 성능을 개선하는 방법
  • RestSharp를 사용하여 ASP.NET Core Web API를 사용하는 방법
  • ASP.NET Core에서 로깅 작업 방법
  • ASP.NET Core에서 MediatR을 사용하는 방법
  • ASP.NET Core에서 세션 상태로 작업하는 방법
  • ASP.NET Core에서 Nancy를 사용하는 방법
  • ASP.NET Web API의 매개 변수 바인딩 이해
  • ASP.NET Core MVC에서 파일을 업로드하는 방법
  • ASP.NET Core Web API에서 전역 예외 처리를 구현하는 방법
  • ASP.NET Core에서 상태 확인을 구현하는 방법
  • ASP.NET 캐싱의 모범 사례
  • .NET에서 Apache Kafka 메시징을 사용하는 방법
  • 웹 API에서 CORS를 활성화하는 방법
  • WebClient 대 HttpClient 대 HttpWebRequest를 사용하는 경우
  • .NET에서 Redis Cache로 작업하는 방법
  • .NET에서 Task.WaitAll 대 Task.WhenAll을 사용하는 경우