두 응용 프로그램이 동일한 데이터베이스 캐시를 공유하는 엔터프라이즈 라이브러리 5 캐싱 블록에 이상한 문제가 있습니다. 나는 EntLib5 ICacheManager를 작성하고 그것을 읽고 쓰는 매우 단순한 정적 캐시 관리자 클래스를 작성했다. 구성 파일은 내가 아무 문제없이 단일 콘솔 응용 프로그램에서 데이터베이스 캐시에 & 읽고 쓸 수여러 응용 프로그램간에 엔터프라이즈 라이브러리 데이터베이스 캐시 공유
private static ICacheManager _manager = null;
private static ICacheManager Manager
{
get
{
lock (ClientLock)
{
if (_manager == null)
_manager = CacheFactory.GetCacheManager();
return _manager;
}
}
}
public static object Get(string cacheKey)
{
return Manager.GetData(cacheKey);
}
public static void Add(string cacheKey, object cacheItem)
{
Manager.Add(cacheKey, cacheItem);
}
내 데이터베이스가 올바르게 설정입니다.
그러나 동일한 캐시를 공유하는 두 응용 프로그램간에 테스트를 수행하려고합니다. 콘솔 _A의 정적 CachingManager 클래스가 캐시에 항목을 추가하면 Console_B가 정적 CacheManager를 인스턴스화 한 후에 변경 사항이 Console_B에 의해 선택되지 않습니다.
여기에 설명 할 빠른 일정이 있습니다.
Start Console_A
Write Item1 from Console_A to Cache - (Static ICacheManager created with noticeable 1sec pause) Success - 1 Item in Cache
Write Item2 from Console_A to Cache - Success - 2 Items in Cache
Write Item3 from Console_A to Cache - Success - 3 Items in Cache
Start Console_B
Read Item1 from Cache to Console_B - (Static ICacheManager created with noticeable 1sec pause) - Success - 3 Items in Cache
Read Item2 from Cache to Console_B - Success - 3 Items in Cache
Read Item3 from Cache to Console_B - Success - 3 Items in Cache
Write Item4 from Console_A to Cache - Success - 4 Items in Cache (Confirmed in DB)
Read Item4 from Cache to Console_B - Failure - 3 Items in Cache
Console_B가 일단 캐시 관리자를 설정하면 데이터베이스를 다시 열어 데이터를 새로 고치는 것 같지 않습니다. the Contains
나는 내 공장에서 if(_manager == null)
수표를 제거하려고 시도 했으므로 매번 공장에서 new
CacheManager를 가져 오지만 아무런 효과가 없었다.
감사의 말.
편집
그것은 ICacheManager에 관계없이 다시 CacheFActory/유니티 EntLibContainer를 호출 여부의 애플리케이션 라이프 사이클 동안 결코 다시 인스턴스화하지만 때 LoadItems
SPROC 만 호출되는 것으로 보인다.
하지만이 정확하게 문제를 해결 얻을 수있을 것이다 DB에 캐시 백업 저장소를 이동하는 점을 생각했다. 이렇게하면 EntLib Caching Block이 다중 노드로드 균형 환경에서 여러 노드 사이에서 캐싱을 원할 때 바로 사용할 수있게됩니다. 좌표를 지정하기 위해 단일 WCF 서비스를 만들어야하기 때문입니다. 모든 캐시 호출. –
바지 입었다. 캐시 백킹 스토어를 DB로 옮겼다는 것을 알기에 충분히 가까이서 읽지 않았습니다. IMO 동의합니다. 작동해야합니다. 미안 내가 도움이되지 않았어. – rie819
문제 없습니다. 그것이 나오면 안된다.분명히 EntLib Caching 블록은 분산 캐시로 사용되지 않도록 설계되지 않았습니다. 순전히 메모리 내 캐시이고 DB Backing Store는 서비스가 실패한 경우 CacheState를 검색 할 수 있도록 설계되었습니다. EntLib # s Cache에 대한 대체 옵션을 찾으려면 드로잉 보드로 돌아갑니다. : –