Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

초고속 성능을 위해 Redis를 사용하는 ASP.NET Core의 마스터 분산 캐싱

초고속 성능을 위해 Redis를 사용하는 ASP.NET Core의 마스터 분산 캐싱

소개

ASP.NET Core 애플리케이션을 구축할 때 가장 큰 과제 중 하나는 성능입니다. 애플리케이션이 성장하고 더 많은 사용자가 이를 사용하기 시작하면 동일한 데이터에 대해 데이터베이스에 계속해서 타격이 가해집니다. 이로 인해 애플리케이션 속도가 느려지고 서버 로드가 증가합니다.

Redis를 사용한 분산 캐싱이 도움이 되는 부분이 바로 여기에 있습니다.

매번 데이터베이스를 호출하는 대신 Redis와 같은 빠른 인메모리 시스템에 자주 사용되는 데이터를 저장합니다. 다음에 누군가가 동일한 데이터를 요청하면 데이터베이스 대신 캐시에서 즉시 반환됩니다.

이 가이드에서는 간단하고 실용적인 용어로 ASP.NET Core에서 Redis 분산 캐싱을 사용하는 방법을 단계별로 학습합니다.

분산 캐싱이란 무엇인가요?

분산 캐싱은 캐시된 데이터를 애플리케이션 외부, 일반적으로 Redis와 같은 별도의 서비스에 저장하는 것을 의미합니다.

일반(메모리 내) 캐시에서는 데이터가 단일 서버 내에 저장됩니다. 애플리케이션이 여러 서버에서 실행되는 경우 각 서버에는 자체 캐시가 있으므로 불일치가 발생할 수 있습니다.

하지만 분산 캐싱에서는:

  • 모든 서버는 동일한 캐시를 공유합니다

  • 데이터는 애플리케이션 전체에서 일관성을 유지합니다

  • 확장 가능한 환경에서 잘 작동합니다

간단히 말해서 분산 캐시는 모든 애플리케이션 서버가 사용할 수 있는 공유 메모리와 같습니다.

Redis란 무엇인가요?

Redis는 캐싱에 널리 사용되는 매우 빠른 인메모리 데이터 저장소입니다.

Redis를 다음과 같은 초고속 사전으로 생각해보세요:

  • 키를 사용하여 데이터를 저장합니다

  • 동일한 키를 사용하여 데이터를 검색합니다

개발자가 Redis를 선호하는 이유:

  • 데이터를 메모리에 저장하기 때문에 속도가 매우 빠릅니다

  • 간단한 키-값 저장을 지원합니다

  • ASP.NET Core와 통합이 쉽습니다

  • 확장 가능한 클라우드 기반 애플리케이션에 적합합니다

전제조건

시작하기 전에 다음 사항이 준비되어 있는지 확인하세요:

  • 시스템에 설치된 .NET SDK

  • 작동 중인 ASP.NET Core 프로젝트

  • Redis가 로컬로 설치되거나 클라우드 Redis 서비스에 액세스

  • ASP.NET Core의 컨트롤러 및 서비스에 대한 기본 이해

Redis가 로컬에 설치되지 않은 경우 Docker 또는 모든 클라우드 공급자를 사용할 수 있습니다.

1단계:필수 NuGet 패키지 설치

먼저 Redis 캐싱 패키지를 설치해야 합니다.

다음 명령을 실행하세요:

dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis

이 패키지는 ASP.NET Core 애플리케이션을 Redis와 연결하고 분산 캐싱 지원을 활성화합니다.

2단계:ASP.NET Core에서 Redis 구성

다음으로 애플리케이션에 Redis에 연결하는 방법을 알려주어야 합니다.

Program.cs을 열어보세요 파일을 만들고 다음 구성을 추가하세요.

builder.Services.AddStackExchangeRedisCache(options =>
{
 options.Configuration = "localhost:6379";
 options.InstanceName = "SampleApp_";
});

간단한 설명:

  • localhost:6379 → Redis가 실행되고 있는 주소입니다

  • InstanceName → 모든 캐시 키에 접두어 추가(데이터 정리에 도움)

클라우드 Redis를 사용하는 경우 localhost 값을 연결 문자열로 바꾸세요.

3단계:IDistributedCache 서비스 삽입

ASP.NET Core는 IDistributedCache이라는 내장 인터페이스를 제공합니다. Redis와 협력하기 위해.

서비스나 컨트롤러에 삽입해야 합니다.

public class ProductService
{
 private readonly IDistributedCache _cache;
 public ProductService(IDistributedCache cache)
 {
 _cache = cache;
 }
}

간단히 말해서, 이를 통해 수업이 Redis와 대화할 수 있습니다.

4단계:Redis 캐시에 데이터 저장

Redis에 데이터를 저장하려면 SetStringAsync를 사용합니다. 방법입니다.

public async Task SetCacheDataAsync(string key, string value)
{
 var options = new DistributedCacheEntryOptions
 {
 AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
 };
 await _cache.SetStringAsync(key, value, options);
}

여기서 무슨 일이 일어나고 있나요?

  • 고유 키를 사용하여 데이터를 저장하고 있습니다

  • 만료 시간(10분)을 설정하고 있습니다.

만료가 중요한 이유:

  • 오래된 데이터 방지

  • 캐시를 깨끗하게 유지

  • 메모리 절약

5단계:캐시에서 데이터 검색

Redis에서 데이터를 얻으려면 다음을 사용하세요:

public async Task<string> GetCacheDataAsync(string key)
{
 return await _cache.GetStringAsync(key);
}

데이터가 존재하면 즉시 반환됩니다.
그렇지 않은 경우 null을 반환합니다.

이는 데이터베이스를 호출하는 것보다 훨씬 빠릅니다.

6단계:캐시 배제 패턴 구현

캐싱을 사용하는 가장 일반적인 방법은 Cache-Aside 패턴입니다.

이는 다음을 의미합니다:

  1. 먼저 캐시를 확인하세요

  2. 데이터가 존재하면 → 반환

  3. 그렇지 않은 경우 → 데이터베이스에서 가져와 캐시에 저장

예:

public async Task<string> GetProductAsync(string productId)
{
 string cacheKey = $"product_{productId}";
 var cachedData = await _cache.GetStringAsync(cacheKey);
 if (!string.IsNullOrEmpty(cachedData))
 {
 return cachedData;
 }
 var productData = "Product from Database";
 await _cache.SetStringAsync(cacheKey, productData, new DistributedCacheEntryOptions
 {
 AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
 });
 return productData;
}

이 접근법은:

  • 데이터베이스 호출 감소

  • 응답 시간 향상

  • 필요할 때 자동으로 캐시 채우기

7단계:복잡한 개체 작업

Redis는 데이터를 문자열로 저장하므로 객체의 경우 JSON으로 변환해야 합니다.

public async Task SetObjectAsync<T>(string key, T data)
{
 var jsonData = JsonSerializer.Serialize(data);
 await _cache.SetStringAsync(key, jsonData);
}
public async Task<T> GetObjectAsync<T>(string key)
{
 var jsonData = await _cache.GetStringAsync(key);
 return jsonData == null ? default : JsonSerializer.Deserialize<T>(jsonData);
}

간단히 말해서:

  • 객체 변환 → JSON → Redis에 저장

  • JSON 검색 → 다시 객체로 변환

8단계:캐시에서 데이터 제거

오래되었거나 잘못된 캐시 데이터를 삭제해야 하는 경우가 있습니다.

await _cache.RemoveAsync("product_1");

다음과 같은 경우에 유용합니다:

  • 데이터가 데이터베이스에서 업데이트됩니다

  • 캐시가 무효화됨

9단계:Redis 캐싱 모범 사례

Redis를 효과적으로 사용하려면 다음과 같은 간단한 방법을 따르십시오.

  • 명확하고 고유한 캐시 키를 사용하세요

  • 항상 만료시간을 설정하세요

  • 민감한 데이터를 캐시하지 마세요

  • 매우 큰 개체를 저장하지 마세요

  • 캐시 사용량 및 성능 모니터링

이러한 관행은 성능을 유지하고 나중에 문제를 방지하는 데 도움이 됩니다.

10단계:일반적인 사용 사례

Redis 캐싱은 일반적으로 다음 용도로 사용됩니다.

  • API 응답 캐싱

  • 제품 목록

  • 사용자 세션

  • 자주 액세스하는 데이터

  • 대시보드 데이터

데이터를 자주 읽지만 변경 빈도가 낮다면 캐싱에 적합합니다.

ASP.NET Core에서 Redis를 사용할 때의 이점

Redis를 사용하면 여러 가지 이점이 있습니다:

  • 더욱 빨라진 애플리케이션 성능

  • 데이터베이스 부하 감소

  • 확장성 향상

  • 향상된 사용자 경험

트래픽이 많은 애플리케이션에 특히 유용합니다.

요약

ASP.NET Core에서 Redis를 사용한 분산 캐싱은 애플리케이션 성능을 향상시키는 간단하면서도 강력한 방법입니다. 데이터베이스를 반복적으로 호출하는 대신 자주 사용하는 데이터를 Redis에 저장하고 필요할 때 빠르게 검색할 수 있습니다. 캐시 배제와 같은 패턴을 사용하고 모범 사례를 적용하는 단계별 접근 방식을 따르면 빠르고 확장 가능하며 효율적인 애플리케이션을 구축할 수 있습니다. 작게 시작하여 가장 중요한 곳에 캐싱을 구현하고 더 나은 성능을 위해 점차적으로 시스템을 최적화하세요.