2015-01-28 2 views
0

주로 국가 및 통화와 같이 정적으로 자주 액세스하는 도메인 클래스는 캐싱을 크게 활용할 수 있습니다.도메인 클래스 캐시를 Grails에서 시간 종료하는 방법 (최대 수명 지정)

class country { 
    : 
    static mapping = { 
     cache usage: 'read-only', include: 'non-lazy' 
    } 
} 

그러나 잠시 동안 새로운 국가가 추가되거나 다중 서버 환경에서 기존 국가가 수정됩니다. 우리가 찾고있는 해결책은 캐시 시간 제한이므로 도메인 클래스 당 구성 가능한 시간 (예 : 10 분이 걸릴 때 데이터를 다시 읽습니다.

현재 유일한 옵션은 캐시하면 모든 서버를 다시 시작해야한다는 것입니다. 변경 사항을 브로드 캐스트하는 분산 캐시의 복잡성, 도메인 당 캐시 에이징 옵션 만 있으면 안됩니다.

이것은 grails 2.4.4에서 가능합니까? 아니면 우리 고유의 캐싱 레이어를 구현해야합니까? MyBatis가 최대 나이 (일명 캐시 타임 아웃)를 지정하는 것은 쉽습니다. grails가 이것을 위해 문서화되지 않은 기능을 가지고 있기를 바랍니다.

답변

1

서버를 다시 시작하는 것이 유일한 옵션입니다.

mapping 블록의 캐싱 구성 옵션은 상당히 제한되어 있지만 표준 구성 API가 없으므로 적어도 부분적으로는 제공 업체에 따라 다르게 수행해야합니다.

기본 구현은 Ehcache이며 매우 간단하게 구성 할 수 있습니다. Ehcache가 클래스 경로의 루트에 ehcache.xml 파일을 찾으면 기본값 대신 해당 파일을 사용합니다. src/java의 Java가 아닌 파일과 grails-app/conf의 Java가 아닌/Groovy가 아닌 파일은 컴파일하는 동안 클래스 경로에있는 디렉토리로 복사되므로 파일을 여기에 두는 것이 액세스하기 쉬운 방법입니다.

this heavily commented example ehcache.xml file을 사용하십시오.

하나 이상의 캐시 된 인스턴스를 제거하려는 경우, Hibernate는이를위한 API를 가지고 있습니다. sessionFactory bean에서 호출 할 수있는 여러 "제거 (evict)"메소드가 있습니다. sessionFactory.evict(Book) 모든 sessionFactory.evict(Book, 5)

으로 Ehcache를 구성하고 2 차 레벨 캐시 API 작업을 포함 this SpringOne/2GX talk에서 슬라이드에 관련된 많은 정보가있어, 아이디 5 캐시 Book 제거, Book 인스턴스를 캐시 삭제합니다.

관련 문제