Redis 분산 캐시 사용
클라우드 네이티브 앱에서 각 팀은 각 팀의 일정에 따라 선호하는 기술을 사용하여 마이크로 서비스를 빌드합니다. 마이크로 서비스는 일반적으로 완전히 독립적으로 작동합니다. 캐시에서 이점을 얻을 수도 있지만, 별도의 캐시를 실행하는 경우 최적의 성능 향상을 실현하지 못할 수 있습니다. 여러 마이크로 서비스에 단일 캐시를 제공하는 경우 해당 서비스는 다른 마이크로 서비스에서 저장한 캐시에서 정보를 검색할 수 있습니다.
아웃도어 장비 소매업체에서 일한다고 상상해 보세요. 쇼핑 카트 마이크로 서비스에서 Redis 서버를 사용하여 캐시를 구현하기로 결정했습니다. 그러나 다른 마이크로 서비스에서도 캐시하는 정보를 활용할 수 있는지 확인하고 싶습니다.
이 단원에서는 분산 Redis 캐시가 앱의 여러 마이크로 서비스에 대한 성능을 최적화하는 방법을 알아봅니다. .NET Aspire를 통해 분산 캐시를 쉽게 구현하는 방법도 확인할 수 있습니다.
분산 캐시란 무엇인가요?
분산 캐시는 여러 호출 서비스 간에 공유되는 캐시입니다. 클라우드 네이티브 애플리케이션에서 호출 서비스는 일반적으로 마이크로 서비스입니다. 카탈로그 인기 제품의 세부 정보와 같은 정보를 분산 캐시에 저장하면 앱의 모든 마이크로 서비스가 잠재적으로 이를 사용하여 성능을 향상할 수 있습니다.
.NET Aspire에서 분산 캐시 설정
분산 캐시를 사용하려면 앱 호스트 프로젝트와 캐시를 사용하는 마이크로 서비스 모두를 변경해야 합니다.
앱 호스트 구성
솔루션의 앱 호스트 프로젝트에서 먼저 분산 캐시 호스팅 구성 요소를 설치합니다.
dotnet add package Aspire.Hosting.Redis --prerelease
또는 Visual Studio에서 > .NET Aspire 구성 요소 추가 바로 가기를 사용하여 NuGet 패키지 관리자에서 구성 요소를 설치할 수 있습니다.
호스팅 구성 요소가 설치되면 앱 호스트의 Program.cs 파일의 코드가 캐시를 등록하고, 캐시를 사용하는 프로젝트에 전달합니다.
// Register the cache
var redis = builder.AddRedis("redis");
// Initiate the consuming project and pass the cache
builder.AddProject<Projects.ConsumingProject>()
.WithReference(redis);
소비 프로젝트 구성
마이크로 서비스에 .NET Aspire 분산 캐시 구성 요소를 설치하려면 .NET Aspire 프로젝트에서 다음과 같은 명령을 사용하세요.
dotnet add package Aspire.StackExchange.Redis.DistributedCache --prerelease
또한 NuGet 패키지 관리자를 사용하여 구성 요소를 설치하도록 선택할 수도 있습니다.
분산 캐시 사용
캐시를 사용하려는 모든 프로젝트에서 Redis에 대한 연결을 나타내는 분산 캐시 개체를 가져와야 합니다. Program.cs 파일에서 이 코드는 분산 캐시를 등록합니다.
builder.AddRedisDistributedCache("cache")
캐시가 소비 프로젝트에 등록되면 종속성 주입을 사용하여 필요할 때마다 분산 캐시를 검색할 수 있습니다.
public class MyService(IDistributedCache cache)
{
public async Task InitializeAsync()
{
// Check if there is cached content
var cachedInfo = await cache.GetAsync("myinfo")
if (cachedInfo is null)
{
// There's no content in the cache so formulate it here
// For example, query databases.
// Store the content in the cache
await cache.SetAsync("myinfo", cachedInformation, new()
{ AbsoluteExpiration = DateTime.Now.AddSeconds(60) }
);
}
}
}
구성
마이크로 서비스가 Redis 분산 캐시에 연결하려면 연결 문자열을 제공하여 위치를 알려야 합니다. 위의 AddRedisDistributedCache()
메서드 호출은 redis
연결 문자열을 지정했습니다.
구성 파일의 ConnectionStrings
섹션(예: appsettings.json)을 사용하여 연결 문자열을 구성합니다.
{
"ConnectionStrings": {
"redis": "redis.contoso.com:6379"
}
}
appsettings.json을 사용하여 분산 캐시 구성 요소의 동작을 구성할 수도 있습니다. 예를 들어 이 코드는 5초 후에 시간이 초과되도록 연결을 구성하고 세 번 다시 시도합니다.
{
"Aspire": {
"StackExchange": {
"Redis": {
"ConfigurationOptions": {
"ConnectTimeout": 5000,
"ConnectRetry": 3
}
}
}
}
}
AddRedisDistributedCache()
메서드에서 인라인 대리자를 사용하여 연결을 구성할 수도 있습니다. 이 코드는 이전 JSON 예제와 동일한 속성을 구성합니다.
builder.AddRedisDistributedCache(
"redis",
configureOptions: options => options.ConnectTimeout = 5000
);