2012-08-28 6 views
1

몇 가지 종류의 캐싱을 구현하고자하는 서비스가 있지만 .NET 4의 ObjectCache를 사용해야하는지 또는 잠시 후에 새로 고침을받는 서비스의 개인 필드가 있는지 여부는 확실하지 않습니다.내 WCF 서비스의 ObjectCache 또는 로컬 필드?

상황은 다음과 같습니다. 서비스는 많은 양의 데이터를 반환하는 데 사용됩니다. 현재 우리는 서비스에 대한 모든 요청에 ​​대해 데이터베이스에 대한 데이터베이스를 조회했습니다. 이 데이터는 자정에 하루에 한 번만 새로 고침됩니다. 이 데이터를 서비스에 캐시하고 데이터베이스 업데이트 후 매일 밤 새로 고침합니다 (약 12:30 am).

이제는 과거에 로컬 필드를 채우고 일정 시간이 경과 한 후 계속 실행되는 "모니터 스레드"를 만들어 해당 필드를 다시 채 웁니다. 내가 보았던 한 가지 단점은 서비스 클래스가 스토리지를위한 추가 코드를 가지고 있다는 것입니다.

ObjectCache로 전환하면 하나의 이점은 만료되면 자동 제거입니다. 내가 생각하고 있었던 것은 CacheEntryRemovedCallback 델리게이트에 콜백 메소드를 할당하고 이것이 호출되었을 때, 미래의 어느 시점에서 데이터를 다시 캐시하기 만하면되었다 (데이터베이스가 새로 고쳐지면 ~ 30 분).

제 질문은 WCF 서비스의 경우 데이터 캐싱에 더 바람직한 옵션이 무엇입니까?

답변

1

System.Runtime.Caching을 사용하십시오. 그것은 자생 자전거보다 낫습니다.

데이터가 자정에만 업데이트 된 경우 SqlChangeMonitor을 사용할 수 있습니다. 그러면 논리가 크게 단순 해지고 캐시가 데이터와 동기화됩니다.

http://www.codeproject.com/Articles/167282/NET-4-0-MemoryCache-with-SqlChangeMonitor

+0

답장을 보내 주셔서 감사합니다. 내가 끌어 당기는 데이터베이스가 실제로 매일 밤 재건되기 때문에 SqlChangeMonitor를 사용할 수 있는지 확실하지 않습니다 ... 단순히 업데이트되지 않았습니다. – Thelonias