PC&웹/VS프로그래밍

C# Microsoft.Extensions.Caching.Memory 대신 LazyCache로 캐싱 사용하기

Simulz™ 2023. 5. 30. 19:50
반응형

데이터베이스에서 값이 거의 바뀌지 않으며 수시로 같은 값을 쿼리할 때마다 DB에서 데이터를 가져오는데, 캐시를 사용하고 싶었다.

 

.NET에서 캐싱 - .NET | Microsoft Learn

 

.NET에서 캐싱 - .NET

.NET에서 메모리 내 및 분산 캐싱을 구현하는 효과적인 방법을 검색합니다. .NET 캐싱을 사용하여 앱 성능 및 확장성을 향상시킵니다.

learn.microsoft.com

위 문서를 보면...

Microsoft.Extensions.Caching.Memory 클래스를 사용해야 한다는 것까지는 알았는데 사용법이 너무 복잡하다. 이를 간단히 사용할 수 있는 방법을 찾아보았다.

단순한 캐싱 기능만을 원했기 때문에 Nuget을 찾아보니 LazyCache가 눈에 띄었다.

게으른 사람을 위한 최적의 캐싱 클래스이다. 🤩

 

LazyCache

사용법은 매우 쉽다.

using LazyCache;

...
Namespace, Class 생략
...

// 수시로 여러번 호출되는 메서드
public static Color GetColorbyUserColor(int id)
{
    IAppCache cache = new CachingService();

    OptionsItem infoTableItem = new();

    return id switch
    {
        1 => cache.GetOrAdd("USER_COLOR1", () => OptionsDac.GetValue(infoTableItem.USER_COLOR1).TypedValue),
        2 => cache.GetOrAdd("USER_COLOR2", () => OptionsDac.GetValue(infoTableItem.USER_COLOR2).TypedValue),
        3 => cache.GetOrAdd("USER_COLOR3", () => OptionsDac.GetValue(infoTableItem.USER_COLOR3).TypedValue),
        4 => cache.GetOrAdd("USER_COLOR4", () => OptionsDac.GetValue(infoTableItem.USER_COLOR4).TypedValue),
        5 => cache.GetOrAdd("USER_COLOR5", () => OptionsDac.GetValue(infoTableItem.USER_COLOR5).TypedValue),
        6 => cache.GetOrAdd("USER_COLOR6", () => OptionsDac.GetValue(infoTableItem.USER_COLOR6).TypedValue),
        7 => cache.GetOrAdd("USER_COLOR7", () => OptionsDac.GetValue(infoTableItem.USER_COLOR7).TypedValue),
        _ => Color.Transparent,
    };
}

using 참조를 추가하고,

IAppCache cache = new CachingService();

사용하는 곳마다 캐싱서비스 인스턴스를 만들고,

 

cache.GetOrAdd("문자열키", () => 실행할 함수코드);

메서드에 키와 값을 할당하면 된다.

키가 없으면 캐시에 값을 추가하고, 키가 있으면 캐시에 저장된 값을 가져온다.

디버깅 모드에서 DB 쿼리문에 중단점을 설정해놓고 확인해보면, 처음 데이터를 가져올 때만 DB 쿼리문이 실행 되고, 그 다음부터는 DB 쿼리 없이 캐시에서 데이터를 가져온다는 것을 알 수 있다.

GetOrAdd 메서드의 제일 기본적인 사용 방법이며, Microsoft.Extensions.Caching.Memory의 다양한 옵션을 제공한다.

 

GitHub

alastairtree/LazyCache: An easy to use thread safe in-memory caching service with a simple developer friendly API for c# (github.com)

 

GitHub - alastairtree/LazyCache: An easy to use thread safe in-memory caching service with a simple developer friendly API for c

An easy to use thread safe in-memory caching service with a simple developer friendly API for c# - GitHub - alastairtree/LazyCache: An easy to use thread safe in-memory caching service with a simpl...

github.com

Wiki 페이지에서 QuickStartLazyCache 2.0.0 Documentation 문서를 참고하면 된다.

반응형