카테고리:

3 분 소요

MemoryCache 클래스

System.Runtime.Caching 네임스페이스의 MemoryCache 클래스는 .NET에서 제공하는 메모리 내 캐싱 솔루션으로, 애플리케이션에서 자주 사용되는 데이터를 메모리에 저장해 빠르게 접근할 수 있게 도와준다. 메모리 캐싱에 특화된 만큼 아래와 같은 특징을 가진다.

  • 메모리 내 캐싱: 데이터를 메모리에 저장하여, 디스크 접근이나 데이터베이스 쿼리보다 훨씬 빠르게 데이터에 접근한다.
  • 정책 기반 관리: 캐시의 항목이 자동으로 삭제되도록 설정할 수 있는 다양한 정책을 제공한다. 예를 들어, 유효 시간(Expiration) 또는 우선 순위(Priority) 설정이 가능하다.
  • 싱글톤 접근: MemoryCache.Default를 사용하여 모든 애플리케이션에서 동일한 캐시 인스턴스를 공유한다.

또한, MemoryCache는 웹 애플리케이션뿐만 아니라 데스크톱 애플리케이션에서도 사용 가능하며, ASP.Net에서 사용하는 System.Web.Caching보다 더 범용적으로 사용할 수 있는 캐싱 솔루션이다.

주의 사항

공식 문서에 따르면 .NET 6 버전 이상은 적용 대상이라고 한다. 하지만 System.Runtime.Caching 네임스페이스의 클래스들은 기본적으로 제공되지 않는 것처럼 보인다.

따라서 using System.Runtime.Caching;을 했음에도 찾을 수 없다고 출력된다면, nuget을 통해 프로젝트에 패키지 참조 속성을 추가해야 한다.

소스 코드

using System;
using System.Runtime.Caching;

public class CacheExample {
  private static MemoryCache _cache = MemoryCache.Default;

  public static void AddItemToCache(string key, object value, int expirationMinutes) {
    // 캐시 항목 정책을 설정한다.
    var policy = new CacheItemPolicy {
      AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(expirationMinutes)
    };

    // 캐시에 항목을 추가한다.
    _cache.Set(key, value, policy);
  }

  public static object GetItemFromCache(string key) {
    // 캐시에서 항목을 가져온다.
    return _cache.Get(key);
  }

  public static void Main(string[] args) {
    string cacheKey = "exampleKey";
    string cacheValue = "This is a cached value.";

    // 캐시에 항목을 추가한다.
    AddItemToCache(cacheKey, cacheValue, 5);

    // 캐시에서 항목을 가져온다.
    var cachedItem = GetItemFromCache(cacheKey);
    if (cachedItem != null) {
      Console.WriteLine($"캐시된 값: {cachedItem}");
    } else {
      Console.WriteLine("캐시에서 항목을 찾을 수 없습니다.");
    }
  }
}

주요 속성 및 메소드

속성

  • Default: MemoryCache의 기본 인스턴스를 제공한다.

메서드

  • Add(string key, object value, CacheItemPolicy policy): 캐시에 항목을 추가한다.
  • Set(string key, object value, CacheItemPolicy policy): 캐시에 항목을 설정하며, 기존 항목이 있으면 덮어쓴다.
  • Get(string key): 지정된 키에 대한 캐시 항목을 반환한다.
  • Remove(string key): 지정된 키의 캐시 항목을 제거한다.

캐시 정책

  • AbsoluteExpiration: 항목이 캐시에 추가된 후 일정 시간이 지나면 자동으로 만료된다.
  • SlidingExpiration: 항목이 마지막으로 접근된 시점으로부터 특정 기간 동안 접근이 없으면 만료된다.
  • Priority: 캐시가 부족할 때 우선적으로 제거할 항목의 우선순위를 설정한다.

참고

https://learn.microsoft.com/ko-kr/dotnet/api/system.runtime.caching.memorycache?view=net-8.0

태그: Caching, Expiration, instance, MemoryCache, Priority, 만료, 메모리, 싱글톤, 인스턴스, 캐싱

업데이트: