최근 Terracotta와 함께 EHCache를 사용하여 응용 프로그램 데이터에 대한 분산 데이터 캐시를 실행하기 시작했습니다. 서버 노드가 8GB 인 반면 클라이언트 노드는 힙에 대해 약 2GB를 가지고 있다고 가정 해 봅시다. 우리는 하루에 약 1.5GB의 많은 데이터를 생성합니다.테라코타를 사용하는 EHCache는 분산 힙에서 퇴거를 어떻게 처리합니까?
일반적으로 모든 클라이언트는 특정 날짜의 데이터 집합 (약 1.5GB)을 사용하지만 서버는 분명히 모든 데이터를 보유해야합니다.
만료가 작동하도록하는 방법은 힙이 커질 때 LRU를 기준으로합니다. 따라서 특정 L1 클라이언트 측 캐시가 너무 커지면 (예 : day1에서 day2로 전환하면) L1에서 모든 day1 데이터를 제거 할 것으로 예상됩니다. 6 번째 데이터 세트를 얻을 때 L2가 너무 커지면 가장 오래된 데이터 세트가 완전히 만료됩니다. 나는 time-to-live 또는 time-to-idle 값에 대해 어떤 의견도 갖고 있지 않다. 그래서 나는 그것들을 설정하지 않은 상태로 둘 것이다.
며칠 후, 예상대로 작동하지 않는다고 생각합니다. 예를 들어, 나는 L2 max 요소가 4 인 테스트를 실행했습니다. 4 개의 요소로 채웠습니다. 그런 다음 다섯 번째 요소를 추가했습니다. Cache.put()은 예외없이 반환되었지만 같은 키를 가진 바로 다음에있는 Cache.get()은 null을 반환했습니다!
제 질문은 EHCache + Terracotta에서 원하는 것을, 또는 적어도 가까운 것을 어떻게 할 수 있습니까?