2012-07-02 4 views
1

모든 단일 페이지에서 데이터베이스에 저장된 데이터 집합을 사용하는 응용 프로그램이 있습니다. 데이터가 필요할 때마다 데이터베이스에 전화하지 않으려면 HttpRuntime.Cache에 넣기로했습니다. DB를 호출하고이 데이터가 사용되는 유일한 곳인 Controller.cs 파일의 생성자에서 데이터를 캐싱 중입니다.캐시를 올바르게 사용하고 있습니까?

위의 방법은 작동하지만 이것이 캐시를로드하는 올바른 위치인지 궁금합니다.

또한 데이터는 모든 사용자에게 동일하며 1 년에 몇 번씩 변경됩니다.

+0

요구 사항에 따라 캐시가 마지막으로 채워 졌을 때를 추적하고 새로 고치는 방법을 제공 할 수 있습니다. – HABO

답변

2

데이터를 캐시하고 캐시 된 데이터를 소비하는 것은 두 가지 다른 문제입니다. 치죠 당신은 데이터 가져 오기 위해이 인터페이스를 가지고,

public interface IDataRepository 
{ 
    List<Data> GetData(); 
} 

당신이 두 가지 구현, 데이터베이스에서 데이터를 가져 오는 하나가 다른 단지 프록시 역할을하고 데이터를 캐싱을 가질 수를 필요한 경우 :

public class DataRepository : IDataRepository 
{ 
    public virtual List<Data> GetData() 
    { 
     //Hit the database and get the data 
    } 
} 

public class CachedDataRepository : DataRepository, IDataRepository 
{ 
    public override List<Data> GetData() 
    { 
     if(!IsCachedAlready()) 
     { 
      var data = base.GetData(); 
      AddToCache(data); 
     } 

     return DataFromCache(); 
    } 
} 

이제 동일한 인터페이스를 사용할 수 있으며 컨트롤러에서 사용중인 데이터가 캐싱되는지 여부는 걱정하지 않아도됩니다.

관련 문제