2014-06-09 4 views
0

나는 이와 같은 표준 WebAPI 방법을 가지고있다. 방법은 SQL 서버 2012 데이터베이스에서 데이터를 검색하는 엔티티 프레임 워크 6.1을 사용ASP.Net WebAPI 컨트롤러가 결과를 캐시 할 수 있습니까?

[ResponseType(typeof(Content))] 
    public async Task<IHttpActionResult> Get(int id) 
    { 
     Content content = await db.Contents.FindAsync(id); 
     if (content == null) 
     { 
      return NotFound(); 
     } 

     return Ok(content); 
    } 

응답이 때문에 데이터베이스마다 액세스하지 않습니다 캐시 할 수있는 방법이 있나요?

+0

당신은 .net 캐싱을 사용할 수 있습니다. 왜 그렇게 의심스럽지는 모르겠습니까? – Devesh

+0

나는 의심하지 않는다. 그것은 어떻게 해야할지 잘 모르겠습니다. 죄송 합니다만 제 질문이 그렇게 좋지 않은 것 같습니다. –

+0

Azure에 있다면 redis 캐시와 샘플 코드를 http://azure.microsoft.com/blog/2014/06/05/mvc-movie-app-with-azure-redis-cache-in- 15 분/ – RickAndMSFT

답변

0

콘텐츠가 널 (NULL) 일 수있는 것처럼 당신이

 if(HttpContext.Current.Cache["myKey"] == null){ 
      //Get the data from the database; 
       HttpContext.Current.Cache["myKey"] = content; 
    }else 
     return ok((Content)HttpContext.Current.Cache["myKey"]); 

처럼 사용할 수있는 내용이 있는지 추적하는 또 하나 개의 캐시 항목을 유지하지만 널 지금이

같이 할

 HttpContext.Current.Cache["IsData"] = content == null ? false : true; 

  if(HttpContext.Current.Cache["IsData"] == null){ 
      //Get the data from the database; 
       HttpContext.Current.Cache["IsData"] = content == null ? false : true; 
       if(content != null){ 
       HttpContext.Current.Cache["myKey"] = content; 

      } 
    } else 
     return HttpContext.Current.Cache["myKey"] != null ? ok((Content)HttpContext.Current.Cache["myKey"]) : NotFound();; 

이 논리는 사용하려는 모든 종류의 캐싱에 적용됩니다.

+0

쉽게 따라 할 수있는 내 질문에 컨트롤러 메서드 예제로 맞는 수있는 방법을 보여줍니다 수 있습니다. 감사. –

+0

@devesh : 올바르게 이해한다고 가정하면, 캐시 한 후에 데이터베이스의 내용이 변경되면 어떻게 될까요? 나는 당신이 항상 원래의 캐싱 된 컨텐트를 얻게 될 것이라고 생각한다. 당신의 예가이 사건에 어떻게 대처할 수 있는지 모르겠습니다. 아마도 내가 틀렸어. 설명 할 수 있다면 좋을거야. – djikay

1

ETags (엔터티 태그)를 사용해야 할 수도 있습니다. 나는 이것을 시도하지 않았지만 this 또는 that 블로그 기사가 유용 할 수 있습니다. 후자에는 캐싱에 대한 블로그 기사에 대한 많은 링크가 포함되어 있습니다.