2012-11-23 3 views

답변

0

수동으로 캐시에서 읽고 쓰는 경우 usr의 대답은 정확합니다. 그러나 OutputCacheAttribute를 사용하면 캐시 키를 직접 제어 할 수 있습니다.

OutputCacheAttribute은 여전히 ​​구현시 캐시 키를 사용합니다. ASP.NET에서는 캐시 된 각 항목에 조회 할 키가 할당됩니다.

컨트롤러 동작을 OutputCacheAttribute으로 호출하면 캐시 키가 요청을 기반으로 생성됩니다. 예를 들어 VaryByParam 지정이있는 경우 캐시 키는 각 사용자마다 다를 수 있습니다. 그런 다음 Action이 반환하는 응답은 해당 키 아래의 캐시에 저장됩니다.

다음 요청이 들어 오면 캐시 키가 생성되고 캐시에서 해당 키 아래에 이미 캐시 된 것이 있는지 확인합니다. 그렇다면, 우리는 단지 그것을 반환합니다. 그렇지 않으면 작업을 계속 진행합니다.

캐시 키에 호스트 이름을 포함시켜 각 바인딩마다 다른 캐시를 가질 수 있습니다. 당신이 OutputCacheAttribute를 사용하는 경우, 당신은 호스트 캐시를 변화 할 수 있도록 재정의 할 수 있습니다

public override string GetVaryByCustomString(HttpContext context, string customVary) 
{ 
    if(customVary == "Host") 
    { 
     return context.Request.Url.Host; 
    } 
    // other behaviors here if necessary 
    return ""; 
} 

이 캐시 키를 동적으로 사이트에 액세스되는 호스트 이름을 포함하도록 수정 될 수 있습니다. 즉, 세 개의 서로 다른 바인딩이있는 경우 세 가지 다른 캐시 키가 있습니다 (다른 다양한 매개 변수가 없다고 가정).

는 여기에 귀하의 컨트롤러 동작을 수정하는 방법은 다음과 같습니다

[MyOutputCache(VaryByParam = "None", VaryByCustom = "Host", Duration = 7200)] 
public ActionResult Index() 
{ 
    // ... 
    return View(); 
} 

공지 한 후 사용되는 키 캐시에 오버라이드 (override) OutputCacheAttribute의 GetVaryByCustomString() 방법으로 볼 수있어 포함되어 VaryByCustom = "Host"포함.

+1

감사합니다 Maxim! 그것은 작동합니다! 그래서 나는 하나 더 [설명] (http://visitmix.com/writings/using-varybycustom-with-outputcache-in-asp-net-mvc-to-support-caching-for-logged-in-users)를 찾았습니다. 당신의 설명 – DmitryBLR

+0

@DmitryBLR 도움이 된 것을 기쁘게 생각합니다! 행운을 빕니다. –

1

Request.Host을 캐시 키의 일부로 사용하십시오.

관련 문제