[C#] MemoryCache 클래스로 데이터 캐싱하기
카테고리: C# + Unity
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