ASP.NET Core MVC의 캐시 태그 도우미

피터 켈너

캐시 태그 도우미는 내부 ASP.NET Core 캐시 공급자에 콘텐츠를 캐싱하여 ASP.NET Core 앱의 성능을 향상시키는 기능을 제공합니다.

태그 도우미에 대한 개요는 ASP.NET Core 태그 도우미를 참조하세요.

다음 Razor 태그는 현재 날짜를 캐시합니다.

<cache>@DateTime.Now</cache>

태그 도우미가 포함된 페이지에 대한 첫 번째 요청은 현재 날짜를 표시합니다. 추가 요청은 캐시가 만료될 때까지(기본값 20분) 또는 캐시된 날짜가 캐시에서 제거될 때까지 캐시된 값을 표시합니다.

캐시 태그 도우미 특성

expires-after

특성 유형 Example Default
TimeSpan @TimeSpan.FromSeconds(120)

expires-after 는 콘텐츠를 캐시하는 첫 번째 요청 시간부터의 시간을 설정합니다.

예제:

<cache expires-after="@TimeSpan.FromSeconds(120)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

enabled

특성 유형 예시 Default
불리언 (Boolean) true, false true

enabled 는 캐시 태그 도우미로 묶인 콘텐츠가 캐시되는지 여부를 결정합니다. 기본값은 true입니다. 이 값으로 false설정하면 렌더링된 출력이 캐시 되지 않습니다 .

예제:

<cache enabled="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-on

특성 유형 Example
DateTimeOffset @new DateTime(2025,1,29,17,02,0)

expires-on 는 캐시된 항목의 절대 만료 날짜를 설정합니다.

다음 예제에서는 2025년 1월 29일 오후 5:02까지 캐시 태그 도우미의 내용을 캐시합니다.

<cache expires-on="@new DateTime(2025,1,29,17,02,0)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-sliding

특성 유형 Example
TimeSpan @TimeSpan.FromSeconds(60)

값에 액세스하지 않은 경우 캐시 항목을 제거해야 하는 시간을 설정합니다.

예제:

<cache expires-sliding="@TimeSpan.FromSeconds(60)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

정의되지 않은 경우 expires-afterexpires-on 기본값은 30초입니다.

priority

특성 유형 예시 Default
CacheItemPriority High, Low, NeverRemoveNormal Normal

priority 는 기본 제공 캐시 공급자에 대한 캐시 제거 지침을 제공합니다. 웹 서버는 메모리 압박을 받을 때 먼저 Low 캐시 항목을 삭제합니다.

예제:

<cache priority="High">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

특성은 priority 특정 수준의 캐시 보존을 보장하지 않습니다. CacheItemPriority 는 제안 사항일 뿐입니다. 이 속성을 NeverRemove로 설정해도 캐시된 항목이 항상 보장되는 것은 아닙니다. 자세한 내용은 추가 리소스 섹션의 항목을 참조하세요.

캐시 태그 도우미는 메모리 캐시 서비스에 종속됩니다. 캐시 태그 도우미가 추가되지 않은 경우 서비스를 추가합니다.

vary-by

특성 유형 Example
String @Model

vary-by 을 사용하면 캐시되는 데이터를 사용자 지정할 수 있습니다. 특성의 문자열 값에서 참조하는 개체가 변경되면 캐시 태그 도우미의 콘텐츠가 업데이트됩니다. 모델 값의 문자열 연결이 이 특성에 할당되는 경우가 많습니다. 이를 통해 연결된 값에 대한 업데이트가 캐시를 무효화하는 시나리오가 효과적으로 발생합니다.

다음 예제에서는 뷰를 렌더링하는 컨트롤러 메서드가 두 경로 매개 변수 myParam1 의 정수 값을 합산하고 myParam2합계를 단일 모델 속성으로 반환하는 경우를 가정합니다. 이 합계가 변경되면 캐시 태그 도우미의 콘텐츠가 렌더링되고 다시 캐시됩니다.

작업:

public IActionResult Index(string myParam1, string myParam2, string myParam3)
{
    int num1;
    int num2;
    int.TryParse(myParam1, out num1);
    int.TryParse(myParam2, out num2);
    return View(viewName, num1 + num2);
}

Index.cshtml:

<cache vary-by="@Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
특성 유형 예시
String .AspNetCore.Identity.Application, .AspNetCore.Identity.Application,HairColor

vary-by-cookie는 cookie의 값이 변경될 때 캐시 새로 고침을 유도하는 cookie 관련된 쉼표로 구분된 이름 목록을 허용합니다.

다음 예제에서는 cookie가 ASP.NET Core Identity와 연결되어 모니터링됩니다. 사용자가 인증되면 변경 내용이 Identitycookie 캐시 새로 고침을 트리거합니다.

<cache vary-by-cookie=".AspNetCore.Identity.Application">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-culture

특성 유형 예시 Default
불리언 (Boolean) true, false false

vary-by-culture 는 요청 문화권에 따라 캐시된 결과를 변경합니다. 속성을 true로 설정하면 결과는 CultureInfo.CurrentCultureCultureInfo.CurrentUICulture에 따라 달라집니다.

예제:

<cache vary-by-culture="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-header

특성 유형 예시
String User-Agent, User-Agent,content-encoding

vary-by-header 는 변경 시 캐시 새로 고침을 트리거하는 헤더 값의 쉼표로 구분된 목록을 허용합니다.

다음 예제에서는 헤더 값을 User-Agent모니터링합니다. 이 예제에서는 웹 서버에 표시되는 모든 다른 User-Agent 콘텐츠에 대한 콘텐츠를 캐시합니다.

<cache vary-by-header="User-Agent">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-query

특성 유형 예시
String Make, Make,Model

vary-by-query 는 나열된 키의 Keys 값이 변경될 때 캐시 새로 고침을 트리거하는 쿼리 문자열(Query)의 쉼표로 구분된 목록을 허용합니다.

다음 예제에서는 및 의 MakeModel값을 모니터링합니다. 이 예제에서는 서로 다른 MakeModel이 웹 서버에 제시될 때마다 콘텐츠를 캐시합니다.

<cache vary-by-query="Make,Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-route

특성 유형 예시
String Make, Make,Model

vary-by-route 는 경로 데이터 매개 변수 값이 변경될 때 캐시 새로 고침을 트리거하는 쉼표로 구분된 경로 매개 변수 이름 목록을 허용합니다.

예제:

Startup.cs:

routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{Make?}/{Model?}");

Index.cshtml:

<cache vary-by-route="Make,Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-user

특성 유형 예시 Default
불리언 (Boolean) true, false false

vary-by-user 는 로그인한 사용자(또는 컨텍스트 보안 주체)가 변경되면 캐시를 다시 설정할지 여부를 지정합니다. 현재 사용자는 요청 컨텍스트의 주 사용자(principal)라고도 하며, Razor 화면에서 @User.Identity.Name를 참조하여 볼 수 있습니다.

다음 예제에서는 현재 로그인한 사용자를 모니터링하여 캐시 새로 고침을 트리거합니다.

<cache vary-by-user="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

이 특성을 사용하면 로그인 및 로그아웃 주기를 통해 캐시의 콘텐츠가 유지됩니다. 값이면 true인증 주기가 인증된 사용자의 캐시를 무효화합니다. 사용자가 인증될 때 새 고유 cookie 값이 생성되므로 캐시가 무효화됩니다. 캐시는 존재하지 않거나 cookiecookie 만료된 경우 익명 상태로 유지 관리됩니다. 사용자가 인증 되지 않으면 캐시가 유지됩니다.

추가 리소스