2011-08-11 7 views
0

나는 Asp.Net MVC 3 사이트를 가지고있다. 다음은 호출 스택을입니다저장 프로 시저에서 캐시 데이터를 반환 했습니까?

Web page/jQuery: $(document).Ready(.... Ajax calls... render the page...) 
=> MVC Control methods 
=> Entity framework 4.1 
=> mapped store procedures (SQL Server 2008) 

질문 :

  1. 가장 좋은 장소는 캐시를 구현하는 것입니다?
  2. 밑줄 SQL 서버 테이블이 업데이트되었음을 ​​페이지에 알리는 방법은 무엇입니까?

답변

0

"최선의"방법은 확실하지 않지만 한 가지 방법은 데이터베이스가 업데이트되었는지 확인하고 확인하기 위해 MVC 컨트롤러 작업을 수행하는 것입니다. (타임 스탬프로 처리 할 수 ​​있습니다.)

결과 함수는 캐시 또는 서버에서 데이터를 검색합니다.

http://davidwalsh.name/cache-ajax

그러나주의해야 할 유일한 재미있는 것은, 캐싱 된 컨텐트를 사용할 수 있는지 먼저 확인하라는 요청이 컨텐트를 전혀 캐싱하지 않는 것보다 빠르다는 것을 확인해야합니다.

0

가능한 한 소스에 가깝게 캐싱을 추가하십시오. 이렇게하면 더 많은 앱에서 향상된 속도의 이점을 얻을 수 있습니다.

기본 테이블을 수정하는 코드를 제어하면 거기에서 캐시를 무효화 할 수 있습니다. 캐시에 짧은 시간 제한을 설정할 수도 있습니다. 캐시를 많이 사용하는 쿼리가 초를 캐싱하면 속도가 여러 배 빨라질 수 있습니다. 시간 초과를 조정할 수 있도록 성능 게인을 테스트하십시오.

0

# 2 질문은 Query Notifications입니다. 모든 것을 설정하는 것은 약간 복잡하지만 데이터베이스의 데이터가 업데이트 될 때까지 캐싱과 같은 작업을 수행 할 수 있습니다.

0

한 가지 방법은 지정된 시간 동안 렌더링 된 뷰를 캐시하는 것입니다.

자주 업데이트되지 않는 페이지가 있다고 가정 해 보겠습니다. 따라서 방문 할 때마다 데이터베이스를 방문하는 대신 렌더링 된 뷰를 캐시에 저장할 수 있습니다. OutputCaching - http://www.asp.net/mvc/tutorials/improving-performance-with-output-caching-cs을 사용하면이 작업을 수행 할 수 있습니다.

또 다른 방법으로는 데이터를 저장할 수 있습니다.

여기 다시 지정된 시간 동안 캐시 할 수 있습니다. ASP.NET (MVC)에서는 캐시 객체 인 http://msdn.microsoft.com/en-us/library/aa478965.aspx을 사용하여이를 수행 할 수 있습니다. 캐시 개체 캐시 개체를 캐시에 넣을 때 데이터를 캐시 할 기간을 지정해줍니다. 예 :

Cache.Insert("key", 
    myTimeSensitiveData, 
    null, 
    DateTime.Now.AddMinutes(1), 
    TimeSpan.Zero); 

또는 '무효화'될 때까지 캐시 할 수 있습니다.

GetCustomers 및 UpdateCustomer 메서드가 있다고 가정 해보십시오. GetCustomers에서 데이터가 캐시에 있는지 확인합니다. 그렇지 않으면 데이터베이스에 충돌하여 캐시에 넣고 반환하십시오. 누군가가 UpdateCustomer를 호출 할 때까지 캐시에 있습니다. 이 방법에서는 수정 된 고객을 데이터베이스에 쓰고 캐시에 저장된 데이터를 무효화합니다. 그냥 제거 할 수 있습니다. 그런 식으로 GetCustomers를 다시 호출하면 데이터베이스에 도달하여 Cache를 다시 채 웁니다. 그러나 Cache는 전역 범위를 가지며 동시에 많은 스레드에서 액세스 할 수 있습니다. 캐시에 액세스하려면 일부 동기화 코드가 필요합니다.

관련 문제