2010-03-07 7 views
2

ehcache를 사용하여 정보를 캐싱 할 계획입니다. 일반적으로 패턴을 따를 것입니다.캐시를 초기화하고 업데이트하는 방법

if data in cache 
    return from cache 
else 
    lookup from source 
    put into cache 
    return data 

그러나이 데이터는 항상 기억에 남는 것이 좋습니다. 내가 할 원합니다 : 애플리케이션 서버가 시작되는 동안

  • 주기적으로 캐시를 업데이트하는 "프로세스/쓰레드/뭔가"가 (내가 보스를 사용하고 있습니다)

    • 채우기 캐시를

    내 첫 번째 생각은 초기로드를 수행하는 ServletContextListener으로 서블릿을 정의한 다음 업데이트를 수행하기 위해 스레드를 시작하는 것입니다.

    더 좋은 방법이 있나요?

  • 답변

    2

    문제는 처음부터 캐시에 들어가는 데이터를 결정할 때의 문제입니다. 캐시가 저장하려는 데이터보다 작다고 가정합니다. 그게 이 아니라면의 경우 캐시를 사용해야하는 이유는 무엇입니까? 데이터를 메모리에 저장하고 처리하십시오.

    당신이 그것을 결정하면, 나는 당신의 제안에 아무런 문제가 없다고 말했습니다. 우리는 초기 버전의 WAS에서 Java 코드를 다시로드 할 때 실제로 유사한 구조를 사용했습니다. 앱 서버의 시작 코드 일부가 미리 컴파일 된 (웹 스크래퍼와 같은) 페이지에 액세스 할 수 있도록 수정되어 사용자가 처음 액세스 할 때 지연이 발생하지 않도록했습니다.

    주기적으로 캐시를 업데이트하려면 캐시 자체에서 수행해야합니다. 모든 변경 사항이 캐시를 통과하면 (write-behind 또는 write-through) 캐시가 자동으로 업데이트되어 별도의 프로세스가 필요하지 않습니다.

    +0

    의견에 감사드립니다. 이 경우 데이터는 메모리에 저장됩니다. Oracle Change Notification 및/또는 트리거를 사용하여 데이터가 변경된시기를 알고 싶습니다. 그 이유는 모든 업데이트가 내 응용 프로그램을 통과하도록 강제 할 수 없기 때문입니다. – Dave

    관련 문제