2012-07-26 3 views
0

저는 Terracotta를 처음 접했고 캐싱 배포를 위해 EHcache를 올바르게 설치하고 작동하게했지만 현재 내가 원하는 것은 실제로 원하는 것이 아닙니다. 내 응용 프로그램에서 ehcache가있는 여러 클라이언트 캐시 (L1)를 갖고 싶습니다. 그리고 클라이언트에서 제거 된 키의 무효화를 다른 모든 클라이언트에 "전파"합니다. 내 캐시가 테라코타 서버에도 있기를 원하지 않기 때문에 단순히 L2 캐싱을 비활성화하여 개체를 직렬화 할 필요가 없습니다 (캐시에서 수행되는 유일한 작업은 PUT 및 REMOVE 임) . 이것이 단순히 ehcache를 사용하여 수행 할 수 있음을 알고 있지만 내 환경 (Amazon EC2)에는 멀티 캐스팅 지원이 없으며 내 클라이언트는 자동 확장 기능으로 자동 생성되므로 해당 IP를 알 수 없습니다. 기본적으로 테라코타 서버는 모든 클라이언트에 무효화 요청을 전파하기 위해서만 필요합니다. 이것을 달성 할 방법이 있습니까? 감사합니다. 당신은 테라코타에 의해 캐시 구성에서 백업으로 Ehcache를 사용하는 경우Terracotta L2 캐시 및 객체 직렬화 비활성화

답변

0

당신은 테라코타를 사용하도록 지정, 예 :

<cache name="com.xyz.MyPOJO" 
    <terracotta/> 
</cache> 

다음 클래스가 직렬화해야합니다 (테라코타는 캐시 서버 인스턴스에 저장하려고하기 때문에 .

그러나, 구성에 당신은 그런 예를 들어, 일부 캐시에 대한 테라코타를 사용하지

<cache name="com.xyz.MyPOJO" 
    <terracotta/> 
</cache> 

<cache name="com.xyz.NotServerStoredPOJO" 
</cache> 

당신의 "를 지정할 수 있습니다 위의 예제에서 "ServerStoredPOJO"는 테라코타 캐시 서버에 저장되지 않습니다 ... 대신 로컬 EhCache에만 저장됩니다 ... 그러나 그렇게하면 diff에서 EhCache를 다른 인스턴스로 전파 할 수 없습니다 JVM.

따라서 테라코타 서버 (무효화 할 항목을 나타내는 플래그)에 무엇인가를 유지해야합니다. 그런 다음 응용 프로그램 코드에서 플래그/012를 로컬 EhCache에서 가져 오는 것보다 앞에 플래그가 있는지 확인하는 공통 클래스/기능이 있어야합니다. 플래그/id가 삭제되면 로컬 캐시에서 해당 플래그를 삭제하고 반환하지 않습니다. 요청자에게 무엇이라도 돌려줘.

반면에, 귀하의 유스 케이스 종류가 중앙 캐시 서버를 갖는 목적을 상실합니다. 중앙 위치없이 여러 캐시 인스턴스를 조정하려는 경우 JGroups http://www.jgroups.org (테라코타 대신)을 사용할 수 있습니다 ... 상업용 라이센스가 필요 없습니다. 그렇다면 Jaches를 통해 로컬 EhCache 인스턴스의 특정 항목을 무효화하는 방법에 대한 자체 메커니즘을 구현해야합니다.

관련 문제