Share via


ASP.NET Core의 캐싱 개요

참고 항목

이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.

Important

이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.

현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.

작성자: Rick AndersonTom Dykstra

메모리 내 캐싱

메모리 내 캐싱은 서버 메모리를 사용하여 캐시된 데이터를 저장합니다. 이 유형의 캐싱은 단일 서버 또는 고정 세션을 사용하는 여러 서버에 적합합니다. 세션 선호도를 고정 세션이라고 도 합니다. 세션 선호도는 클라이언트의 요청이 처리를 위해 항상 동일한 서버로 라우팅되는 것을 의미합니다.

자세한 내용은 ASP.NET Core 메모리 내 캐시Azure Application Gateway 세션 선호도 이슈 해결을 참조하세요.

분산 캐시

분산 캐시를 사용하여 앱이 클라우드 또는 서버 팜에서 호스트될 때 데이터를 저장합니다. 캐시는 요청을 처리하는 서버에서 공유됩니다. 클라이언트에 대해 캐시된 데이터를 사용할 수 있는 경우 클라이언트는 그룹의 모든 서버에서 처리한 요청을 제출할 수 있습니다. ASP.NET Core는 SQL Server, RedisNCache 분산 캐시와 함께 작동합니다.

자세한 내용은 ASP.NET Core의 분산 캐싱을 참조하세요.

HybridCache

API는 HybridCache API와 IMemoryCache API의 IDistributedCache 일부 격차를 해소합니다. HybridCache 는 캐시에 저장하고 캐시에서 검색하는 대부분의 측면을 처리하는 기본 구현인 추상 클래스 wth입니다.

기능

HybridCache 에는 다른 API에 없는 다음과 같은 기능이 있습니다.

  • In-Process 및 Out-of-process 캐싱 모두에 대한 통합 API입니다.

    HybridCache 는 기존 IDistributedCacheIMemoryCache 사용을 위한 드롭인 대체 기능으로 설계되었으며 새 캐싱 코드를 추가하기 위한 간단한 API를 제공합니다. 앱에 구현 HybridCache 이 있는 IDistributedCache 경우 서비스는 이를 보조 캐싱에 사용합니다. 이 2단계 캐싱 전략을 사용하면 메모리 내 캐시의 속도와 분산 또는 영구 캐시의 내구성을 제공할 수 HybridCache 있습니다.

  • 스탬피드 보호.

    캐시 스탬프는 자주 사용되는 캐시 항목이 해지되고 너무 많은 요청이 동일한 캐시 항목을 동시에 다시 채점하려고 할 때 발생합니다. HybridCache 는 동시 작업을 결합하여 지정된 응답에 대한 모든 요청이 첫 번째 요청이 캐시를 채울 때까지 대기하도록 합니다.

  • 구성 가능한 serialization입니다.

    직렬화는 서비스 등록의 일부로 구성되며, 호출에서 AddHybridCache 연결된 메서드 및 메서드를 통해 WithSerializer 형식별 및 WithSerializerFactory 일반화된 직렬 변환기를 지원합니다. 기본적으로 서비스는 내부적으로 처리 stringbyte[] 하고 다른 모든 항목에 사용합니다 System.Text.Json . protobuf 또는 XML과 같은 다른 유형의 serializer에 대해 구성할 수 있습니다.

API의 HybridCache 상대적 단순성을 확인하려면 API를 사용하는 코드를 사용하는 IDistributedCache코드와 비교합니다. 다음은 사용 IDistributedCache 이 어떻게 표시되는지에 대한 예입니다.

public class SomeService(IDistributedCache cache)
{
    public async Task<SomeInformation> GetSomeInformationAsync
        (string name, int id, CancellationToken token = default)
    {
        var key = $"someinfo:{name}:{id}"; // Unique key for this combination.
        var bytes = await cache.GetAsync(key, token); // Try to get from cache.
        SomeInformation info;
        if (bytes is null)
        {
            // Cache miss; get the data from the real source.
            info = await SomeExpensiveOperationAsync(name, id, token);

            // Serialize and cache it.
            bytes = SomeSerializer.Serialize(info);
            await cache.SetAsync(key, bytes, token);
        }
        else
        {
            // Cache hit; deserialize it.
            info = SomeSerializer.Deserialize<SomeInformation>(bytes);
        }
        return info;
    }

    // This is the work we're trying to cache.
    private async Task<SomeInformation> SomeExpensiveOperationAsync(string name, int id,
        CancellationToken token = default)
    { /* ... */ }
}

직렬화와 같은 작업을 포함하여 매번 제대로 하기 위해 많은 작업이 수행됩니다. 그리고 "캐시 누락" 시나리오에서는 여러 개의 동시 스레드, 모든 캐시 누락 가져오기, 모든 기본 데이터 가져오기, 모든 직렬화 및 해당 데이터를 캐시로 보낼 수 있습니다.

다음은 다음을 사용하는 동등한 코드입니다.HybridCache

public class SomeService(HybridCache cache)
{
    public async Task<SomeInformation> GetSomeInformationAsync
        (string name, int id, CancellationToken token = default)
    {
        return await cache.GetOrCreateAsync(
            $"someinfo:{name}:{id}", // Unique key for this entry.
            async cancel => await SomeExpensiveOperationAsync(name, id, cancel),
            token: token
        );
    }
}

코드는 더 간단하며 라이브러리는 스탬피드 보호 및 그렇지 않은 기타 기능을 IDistributedCache 제공합니다.

호환성

라이브러리는 .NET Framework 4.7.2 및 .NET Standard 2.0까지 이전 .NET 런타임을 지원합니다.

추가 리소스

자세한 내용은 다음 리소스를 참조하세요.

응답 캐싱

응답 캐싱 미들웨어:

  • HTTP 캐시 헤더를 기반으로 서버 응답을 캐싱할 수 있도록 합니다. 표준 HTTP 캐싱 의미 체계를 구현합니다. 프록시처럼 HTTP 캐시 헤더에 기반하여 캐시합니다.
  • 브라우저는 일반적으로 캐싱을 방지하는 요청 헤더를 설정하기 때문에 Razor Pages와 같은 UI 앱에는 일반적으로 도움이 되지 않습니다. ASP.NET Core 7.0 이상에서 사용할 수 있는 출력 캐싱은 UI 앱에 이점을 제공합니다. 출력 캐싱을 사용하여 구성에서 HTTP 헤더와 독립적으로 캐시할 내용을 결정합니다.
  • 캐싱 조건이 충족되는 클라이언트의 퍼블릭 GET 또는 HEAD API 요청에 도움이 될 수 있습니다.

응답 캐싱을 테스트하려면 Fiddler 또는 요청 헤더를 명시적으로 설정할 수 있는 다른 도구를 사용합니다. 헤더를 명시적으로 설정하는 것은 캐싱을 테스트하는 데 선호됩니다. 자세한 내용은 문제 해결을 참조하십시오.

자세한 내용은 ASP.NET Core의 응답 캐싱을 참조하세요.

출력 캐싱

출력 캐싱 미들웨어를 사용하면 HTTP 응답을 캐싱할 수 있습니다. 출력 캐싱은 아래와 같이 응답 캐싱과 다릅니다.

  • 캐싱 동작은 서버에서 구성할 수 있습니다.

    응답 캐싱 동작은 HTTP 헤더로 정의됩니다. 예를 들어 Chrome 또는 Edge를 사용하여 웹 사이트를 방문하면 브라우저에서 자동으로 Cache-control: max-age=0 헤더를 보냅니다. 이 헤더는 서버가 클라이언트에서 제공하는 지침을 따르므로 응답 캐싱을 효과적으로 사용하지 않도록 설정합니다. 서버에 새로 캐시된 응답이 있더라도 모든 요청에 대해 새 응답이 반환됩니다. 출력 캐싱을 사용하면 클라이언트가 서버에서 구성하는 캐싱 동작을 재정의하지 않습니다.

  • 캐시 저장소 매체는 확장할 수 있습니다.

    메모리는 기본적으로 사용됩니다. 응답 캐싱은 메모리로 제한됩니다.

  • 선택한 캐시 항목을 프로그래밍 방식으로 무효화할 수 있습니다.

    응답 캐싱이 HTTP 헤더에 의존하면 캐시 항목을 무효화하기 위한 몇 가지 옵션이 남습니다.

  • 리소스 잠금을 통해 캐시 스탬프 및 썬더링 무리 위험을 완화할 수 있습니다.

    캐시 스탬프는 자주 사용되는 캐시 항목이 해지되고 너무 많은 요청이 동일한 캐시 항목을 동시에 다시 채점하려고 할 때 발생합니다. 천둥 무리 는 비슷합니다: 캐시 항목에 아직 없는 동일한 응답에 대 한 요청의 버스트. 리소스 잠금은 지정된 응답에 대한 모든 요청이 첫 번째 요청이 캐시를 채울 때까지 대기하도록 합니다. 응답 캐싱에는 리소스 잠금 기능이 없습니다.

  • 캐시 유효성 재검사로 대역폭 사용량이 최소화됩니다.

    캐시 유효성 재검사란 서버가 캐시된 응답 본문 대신 HTTP 상태 코드를 반환 304 Not Modified 할 수 있습니다. 이 상태 코드는 요청에 대한 응답이 이전에 받은 응답과 변경되지 않음을 클라이언트에 알릴 수 있습니다. 응답 캐싱은 캐시 유효성 검사를 수행하지 않습니다.

자세한 내용은 ASP.NET Core의 출력 캐싱 미들웨어를 참조하세요.

캐시 태그 도우미

캐시 태그 도우미를 사용하여 MVC 보기 또는 Razor Page에서 콘텐츠를 캐시합니다. 캐시 태그 도우미는 메모리 내 캐싱을 사용하여 데이터를 저장합니다.

자세한 내용은 ASP.NET Core MVC의 캐시 태그 도우미를 참조하세요.

분산 캐시 태그 도우미

분산된 캐시 태그 도우미를 사용하여 분산 클라우드 또는 웹 팜 시나리오의 MVC 보기나 Razor Page에서 콘텐츠를 캐시합니다. 분산 캐시 태그 도우미는 SQL Server, Redis 또는 NCache를 사용하여 데이터를 저장합니다.

자세한 내용은 ASP.NET Core의 분산 캐시 태그 도우미를 참조하세요.

메모리 내 캐싱

메모리 내 캐싱은 서버 메모리를 사용하여 캐시된 데이터를 저장합니다. 이 유형의 캐싱은 단일 서버 또는 고정 세션을 사용하는 여러 서버에 적합합니다. 세션 선호도를 고정 세션이라고 도 합니다. 세션 선호도는 클라이언트의 요청이 처리를 위해 항상 동일한 서버로 라우팅되는 것을 의미합니다.

자세한 내용은 ASP.NET Core 메모리 내 캐시Azure Application Gateway 세션 선호도 이슈 해결을 참조하세요.

분산 캐시

분산 캐시를 사용하여 앱이 클라우드 또는 서버 팜에서 호스트될 때 데이터를 저장합니다. 캐시는 요청을 처리하는 서버에서 공유됩니다. 클라이언트에 대해 캐시된 데이터를 사용할 수 있는 경우 클라이언트는 그룹의 모든 서버에서 처리한 요청을 제출할 수 있습니다. ASP.NET Core는 SQL Server, RedisNCache 분산 캐시와 함께 작동합니다.

자세한 내용은 ASP.NET Core의 분산 캐싱을 참조하세요.

HybridCache

API는 HybridCache API와 IMemoryCache API의 IDistributedCache 일부 격차를 해소합니다. HybridCache 는 캐시에 저장하고 캐시에서 검색하는 대부분의 측면을 처리하는 기본 구현인 추상 클래스 wth입니다.

기능

HybridCache 에는 다른 API에 없는 다음과 같은 기능이 있습니다.

  • In-Process 및 Out-of-process 캐싱 모두에 대한 통합 API입니다.

    HybridCache 는 기존 IDistributedCacheIMemoryCache 사용을 위한 드롭인 대체 기능으로 설계되었으며 새 캐싱 코드를 추가하기 위한 간단한 API를 제공합니다. 앱에 구현 HybridCache 이 있는 IDistributedCache 경우 서비스는 이를 보조 캐싱에 사용합니다. 이 2단계 캐싱 전략을 사용하면 메모리 내 캐시의 속도와 분산 또는 영구 캐시의 내구성을 제공할 수 HybridCache 있습니다.

  • 스탬피드 보호.

    캐시 스탬프는 자주 사용되는 캐시 항목이 해지되고 너무 많은 요청이 동일한 캐시 항목을 동시에 다시 채점하려고 할 때 발생합니다. HybridCache 는 동시 작업을 결합하여 지정된 응답에 대한 모든 요청이 첫 번째 요청이 캐시를 채울 때까지 대기하도록 합니다.

  • 구성 가능한 serialization입니다.

    직렬화는 서비스 등록의 일부로 구성되며, 호출에서 AddHybridCache 연결된 메서드 및 메서드를 통해 WithSerializer 형식별 및 WithSerializerFactory 일반화된 직렬 변환기를 지원합니다. 기본적으로 서비스는 내부적으로 처리 stringbyte[] 하고 다른 모든 항목에 사용합니다 System.Text.Json . protobuf 또는 XML과 같은 다른 유형의 serializer에 대해 구성할 수 있습니다.

API의 HybridCache 상대적 단순성을 확인하려면 API를 사용하는 코드를 사용하는 IDistributedCache코드와 비교합니다. 다음은 사용 IDistributedCache 이 어떻게 표시되는지에 대한 예입니다.

public class SomeService(IDistributedCache cache)
{
    public async Task<SomeInformation> GetSomeInformationAsync
        (string name, int id, CancellationToken token = default)
    {
        var key = $"someinfo:{name}:{id}"; // Unique key for this combination.
        var bytes = await cache.GetAsync(key, token); // Try to get from cache.
        SomeInformation info;
        if (bytes is null)
        {
            // Cache miss; get the data from the real source.
            info = await SomeExpensiveOperationAsync(name, id, token);

            // Serialize and cache it.
            bytes = SomeSerializer.Serialize(info);
            await cache.SetAsync(key, bytes, token);
        }
        else
        {
            // Cache hit; deserialize it.
            info = SomeSerializer.Deserialize<SomeInformation>(bytes);
        }
        return info;
    }

    // This is the work we're trying to cache.
    private async Task<SomeInformation> SomeExpensiveOperationAsync(string name, int id,
        CancellationToken token = default)
    { /* ... */ }
}

직렬화와 같은 작업을 포함하여 매번 제대로 하기 위해 많은 작업이 수행됩니다. 그리고 "캐시 누락" 시나리오에서는 여러 개의 동시 스레드, 모든 캐시 누락 가져오기, 모든 기본 데이터 가져오기, 모든 직렬화 및 해당 데이터를 캐시로 보낼 수 있습니다.

다음은 다음을 사용하는 동등한 코드입니다.HybridCache

public class SomeService(HybridCache cache)
{
    public async Task<SomeInformation> GetSomeInformationAsync
        (string name, int id, CancellationToken token = default)
    {
        return await cache.GetOrCreateAsync(
            $"someinfo:{name}:{id}", // Unique key for this entry.
            async cancel => await SomeExpensiveOperationAsync(name, id, cancel),
            token: token
        );
    }
}

코드는 더 간단하며 라이브러리는 스탬피드 보호 및 그렇지 않은 기타 기능을 IDistributedCache 제공합니다.

호환성

라이브러리는 .NET Framework 4.7.2 및 .NET Standard 2.0까지 이전 .NET 런타임을 지원합니다.

추가 리소스

자세한 내용은 다음 리소스를 참조하세요.

캐시 태그 도우미

캐시 태그 도우미를 사용하여 MVC 보기 또는 Razor Page에서 콘텐츠를 캐시합니다. 캐시 태그 도우미는 메모리 내 캐싱을 사용하여 데이터를 저장합니다.

자세한 내용은 ASP.NET Core MVC의 캐시 태그 도우미를 참조하세요.

분산 캐시 태그 도우미

분산된 캐시 태그 도우미를 사용하여 분산 클라우드 또는 웹 팜 시나리오의 MVC 보기나 Razor Page에서 콘텐츠를 캐시합니다. 분산 캐시 태그 도우미는 SQL Server, Redis 또는 NCache를 사용하여 데이터를 저장합니다.

자세한 내용은 ASP.NET Core의 분산 캐시 태그 도우미를 참조하세요.

응답 캐싱

응답 캐싱 미들웨어:

  • HTTP 캐시 헤더를 기반으로 서버 응답을 캐싱할 수 있도록 합니다. 표준 HTTP 캐싱 의미 체계를 구현합니다. 프록시처럼 HTTP 캐시 헤더에 기반하여 캐시합니다.
  • 브라우저는 일반적으로 캐싱을 방지하는 요청 헤더를 설정하기 때문에 Razor Pages와 같은 UI 앱에는 일반적으로 도움이 되지 않습니다. ASP.NET Core 7.0 이상에서 사용할 수 있는 출력 캐싱은 UI 앱에 이점을 제공합니다. 출력 캐싱을 사용하여 구성에서 HTTP 헤더와 독립적으로 캐시할 내용을 결정합니다.
  • 캐싱 조건이 충족되는 클라이언트의 퍼블릭 GET 또는 HEAD API 요청에 도움이 될 수 있습니다.

응답 캐싱을 테스트하려면 Fiddler 또는 요청 헤더를 명시적으로 설정할 수 있는 다른 도구를 사용합니다. 헤더를 명시적으로 설정하는 것은 캐싱을 테스트하는 데 선호됩니다. 자세한 내용은 문제 해결을 참조하십시오.

출력 캐싱

출력 캐싱 미들웨어를 사용하면 HTTP 응답을 캐싱할 수 있습니다. 출력 캐싱은 아래와 같이 응답 캐싱과 다릅니다.

  • 캐싱 동작은 서버에서 구성할 수 있습니다.

    응답 캐싱 동작은 HTTP 헤더로 정의됩니다. 예를 들어 Chrome 또는 Edge를 사용하여 웹 사이트를 방문하면 브라우저에서 자동으로 Cache-control: max-age=0 헤더를 보냅니다. 이 헤더는 서버가 클라이언트에서 제공하는 지침을 따르므로 응답 캐싱을 효과적으로 사용하지 않도록 설정합니다. 서버에 새로 캐시된 응답이 있더라도 모든 요청에 대해 새 응답이 반환됩니다. 출력 캐싱을 사용하면 클라이언트가 서버에서 구성하는 캐싱 동작을 재정의하지 않습니다.

  • 캐시 저장소 매체는 확장할 수 있습니다.

    메모리는 기본적으로 사용됩니다. 응답 캐싱은 메모리로 제한됩니다.

  • 선택한 캐시 항목을 프로그래밍 방식으로 무효화할 수 있습니다.

    응답 캐싱이 HTTP 헤더에 의존하면 캐시 항목을 무효화하기 위한 몇 가지 옵션이 남습니다.

  • 리소스 잠금을 통해 캐시 스탬프 및 썬더링 무리 위험을 완화할 수 있습니다.

    캐시 스탬프는 자주 사용되는 캐시 항목이 해지되고 너무 많은 요청이 동일한 캐시 항목을 동시에 다시 채점하려고 할 때 발생합니다. 천둥 무리 는 비슷합니다: 캐시 항목에 아직 없는 동일한 응답에 대 한 요청의 버스트. 리소스 잠금은 지정된 응답에 대한 모든 요청이 첫 번째 요청이 캐시를 채울 때까지 대기하도록 합니다. 응답 캐싱에는 리소스 잠금 기능이 없습니다.

  • 캐시 유효성 재검사로 대역폭 사용량이 최소화됩니다.

    캐시 유효성 재검사란 서버가 캐시된 응답 본문 대신 HTTP 상태 코드를 반환 304 Not Modified 할 수 있습니다. 이 상태 코드는 요청에 대한 응답이 이전에 받은 응답과 변경되지 않음을 클라이언트에 알릴 수 있습니다. 응답 캐싱은 캐시 유효성 검사를 수행하지 않습니다.

메모리 내 캐싱

메모리 내 캐싱은 서버 메모리를 사용하여 캐시된 데이터를 저장합니다. 이 유형의 캐싱은 단일 서버 또는 고정 세션을 사용하는 여러 서버에 적합합니다. 세션 선호도를 고정 세션이라고 도 합니다. 세션 선호도는 클라이언트의 요청이 처리를 위해 항상 동일한 서버로 라우팅되는 것을 의미합니다.

자세한 내용은 ASP.NET Core 메모리 내 캐시Azure Application Gateway 세션 선호도 이슈 해결을 참조하세요.

분산 캐시

분산 캐시를 사용하여 앱이 클라우드 또는 서버 팜에서 호스트될 때 데이터를 저장합니다. 캐시는 요청을 처리하는 서버에서 공유됩니다. 클라이언트에 대해 캐시된 데이터를 사용할 수 있는 경우 클라이언트는 그룹의 모든 서버에서 처리한 요청을 제출할 수 있습니다. ASP.NET Core는 SQL Server, RedisNCache 분산 캐시와 함께 작동합니다.

자세한 내용은 ASP.NET Core의 분산 캐싱을 참조하세요.

HybridCache

API는 HybridCache API와 IMemoryCache API의 IDistributedCache 일부 격차를 해소합니다. HybridCache 는 캐시에 저장하고 캐시에서 검색하는 대부분의 측면을 처리하는 기본 구현인 추상 클래스 wth입니다.

기능

HybridCache 에는 다른 API에 없는 다음과 같은 기능이 있습니다.

  • In-Process 및 Out-of-process 캐싱 모두에 대한 통합 API입니다.

    HybridCache 는 기존 IDistributedCacheIMemoryCache 사용을 위한 드롭인 대체 기능으로 설계되었으며 새 캐싱 코드를 추가하기 위한 간단한 API를 제공합니다. 앱에 구현 HybridCache 이 있는 IDistributedCache 경우 서비스는 이를 보조 캐싱에 사용합니다. 이 2단계 캐싱 전략을 사용하면 메모리 내 캐시의 속도와 분산 또는 영구 캐시의 내구성을 제공할 수 HybridCache 있습니다.

  • 스탬피드 보호.

    캐시 스탬프는 자주 사용되는 캐시 항목이 해지되고 너무 많은 요청이 동일한 캐시 항목을 동시에 다시 채점하려고 할 때 발생합니다. HybridCache 는 동시 작업을 결합하여 지정된 응답에 대한 모든 요청이 첫 번째 요청이 캐시를 채울 때까지 대기하도록 합니다.

  • 구성 가능한 serialization입니다.

    직렬화는 서비스 등록의 일부로 구성되며, 호출에서 AddHybridCache 연결된 메서드 및 메서드를 통해 WithSerializer 형식별 및 WithSerializerFactory 일반화된 직렬 변환기를 지원합니다. 기본적으로 서비스는 내부적으로 처리 stringbyte[] 하고 다른 모든 항목에 사용합니다 System.Text.Json . protobuf 또는 XML과 같은 다른 유형의 serializer에 대해 구성할 수 있습니다.

API의 HybridCache 상대적 단순성을 확인하려면 API를 사용하는 코드를 사용하는 IDistributedCache코드와 비교합니다. 다음은 사용 IDistributedCache 이 어떻게 표시되는지에 대한 예입니다.

public class SomeService(IDistributedCache cache)
{
    public async Task<SomeInformation> GetSomeInformationAsync
        (string name, int id, CancellationToken token = default)
    {
        var key = $"someinfo:{name}:{id}"; // Unique key for this combination.
        var bytes = await cache.GetAsync(key, token); // Try to get from cache.
        SomeInformation info;
        if (bytes is null)
        {
            // Cache miss; get the data from the real source.
            info = await SomeExpensiveOperationAsync(name, id, token);

            // Serialize and cache it.
            bytes = SomeSerializer.Serialize(info);
            await cache.SetAsync(key, bytes, token);
        }
        else
        {
            // Cache hit; deserialize it.
            info = SomeSerializer.Deserialize<SomeInformation>(bytes);
        }
        return info;
    }

    // This is the work we're trying to cache.
    private async Task<SomeInformation> SomeExpensiveOperationAsync(string name, int id,
        CancellationToken token = default)
    { /* ... */ }
}

직렬화와 같은 작업을 포함하여 매번 제대로 하기 위해 많은 작업이 수행됩니다. 그리고 "캐시 누락" 시나리오에서는 여러 개의 동시 스레드, 모든 캐시 누락 가져오기, 모든 기본 데이터 가져오기, 모든 직렬화 및 해당 데이터를 캐시로 보낼 수 있습니다.

다음은 다음을 사용하는 동등한 코드입니다.HybridCache

public class SomeService(HybridCache cache)
{
    public async Task<SomeInformation> GetSomeInformationAsync
        (string name, int id, CancellationToken token = default)
    {
        return await cache.GetOrCreateAsync(
            $"someinfo:{name}:{id}", // Unique key for this entry.
            async cancel => await SomeExpensiveOperationAsync(name, id, cancel),
            token: token
        );
    }
}

코드는 더 간단하며 라이브러리는 스탬피드 보호 및 그렇지 않은 기타 기능을 IDistributedCache 제공합니다.

호환성

라이브러리는 .NET Framework 4.7.2 및 .NET Standard 2.0까지 이전 .NET 런타임을 지원합니다.

추가 리소스

자세한 내용은 다음 리소스를 참조하세요.

캐시 태그 도우미

캐시 태그 도우미를 사용하여 MVC 보기 또는 Razor Page에서 콘텐츠를 캐시합니다. 캐시 태그 도우미는 메모리 내 캐싱을 사용하여 데이터를 저장합니다.

자세한 내용은 ASP.NET Core MVC의 캐시 태그 도우미를 참조하세요.

분산 캐시 태그 도우미

분산된 캐시 태그 도우미를 사용하여 분산 클라우드 또는 웹 팜 시나리오의 MVC 보기나 Razor Page에서 콘텐츠를 캐시합니다. 분산 캐시 태그 도우미는 SQL Server, Redis 또는 NCache를 사용하여 데이터를 저장합니다.

자세한 내용은 ASP.NET Core의 분산 캐시 태그 도우미를 참조하세요.

응답 캐싱

응답 캐싱 미들웨어:

  • HTTP 캐시 헤더를 기반으로 서버 응답을 캐싱할 수 있도록 합니다. 표준 HTTP 캐싱 의미 체계를 구현합니다. 프록시처럼 HTTP 캐시 헤더에 기반하여 캐시합니다.
  • 브라우저는 일반적으로 캐싱을 방지하는 요청 헤더를 설정하기 때문에 Razor Pages와 같은 UI 앱에는 일반적으로 도움이 되지 않습니다. ASP.NET Core 7.0 이상에서 사용할 수 있는 출력 캐싱은 UI 앱에 이점을 제공합니다. 출력 캐싱을 사용하여 구성에서 HTTP 헤더와 독립적으로 캐시할 내용을 결정합니다.
  • 캐싱 조건이 충족되는 클라이언트의 퍼블릭 GET 또는 HEAD API 요청에 도움이 될 수 있습니다.

응답 캐싱을 테스트하려면 Fiddler 또는 요청 헤더를 명시적으로 설정할 수 있는 다른 도구를 사용합니다. 헤더를 명시적으로 설정하는 것은 캐싱을 테스트하는 데 선호됩니다. 자세한 내용은 문제 해결을 참조하십시오.

출력 캐싱

출력 캐싱은 .NET 7 이상에서 사용할 수 있습니다.