2012-03-10 2 views
1

나는 grails 애플리케이션에서 일부 도메인 인스턴스와 쿼리를 캐시했다. 처음으로 쿼리가 db로 시작되면 후속 호출은 캐시에만 도달 할 것으로 예상됩니다. 그러나 나는 정기적으로 쿼리가 db (각 5-6 회 후)에 도달한다는 것을보고 있습니다. 데이터베이스에 업데이트/삽입되는 데이터가 없습니다. 나는 기록 된 모든 쿼리를 체크 아웃하기 위해 p6spy를 사용하고 있으며 업데이트 나 삽입을 보지 못합니다.Grails에서 캐시가 무효화되는 이유는 무엇입니까?

트위터에 추가로 필요한 설정이 있습니까?

현재 도메인 클래스는 findBy* 같은

static mapping = { 
cach true 
} 

쿼리가 [cache:true] 세트를 가지고 있습니다.

+1

이것은 정상입니다. 특정 조건이 충족되면 캐시가 무효화됩니다. 캐시 구성은 ehcache 구성에서 설정해야합니다. 기본적으로로드되는 ehcache-failsafe 구성이 있습니다. 그리고 나는 캐시가 기본적으로 5 분 후에 무효화된다고 생각합니다. – netbrain

답변

5

Ehcache를 구성하지 않으면 캐시의 기본 제한 시간 인 120 초가 사용됩니다. Ehcache jar에있는 기본 파일과 동일한 주석이있는 예제 파일은 http://ehcache.org/ehcache.xml을 참조하십시오.

응용 프로그램에서 ehcache.xml을 작성하여 시간 초과, 메모리의 최대 요소, 디스크로 넘칠지 여부 등을 구성 할 수 있습니다. src/java에 넣으면 classpath에 복사되고 Ehcache는 그것을보고 기본값 대신 사용합니다.

+0

최대 절전 모드 쿼리 캐시와 관련된 다음 게시물 (http://tech.puredanger.com/2009/07/10/hibernate-query-cache/)을 발견했습니다. 이 관찰은 여전히 ​​유효합니까? 즉, 쿼리 캐시를 모두 끄는 것이 더 좋습니다. – Abe

+1

예, 모든 포인트는 여전히 유효합니다. 일부 쿼리는 캐싱에 적합한 후보이지만 특정 도메인 클래스의 인스턴스를 편집, 추가 또는 삭제하는 경우 해당 클래스에 대한 쿼리를 캐시하지 않는 것이 가장 좋습니다. 읽기 전용 및 읽기 전용 도메인 클래스 및 업데이트 된 클래스에 대한 인스턴스 및 쿼리를 캐시하십시오 (응용 프로그램 및 사용 사례에 따라 다름). 나는'Config.groovy'에서'grails.hibernate.cache.queries'를 false로 변경하고 쿼리마다'cache : true'를 추가하는 것을 권장합니다. –

+0

고마워! grails.hibernate.cache.queries를 false로 설정하면 쿼리를 캐시 할 수 없다는 것을 알았습니다. 이 기능을 끄면 캐시를 설정할 수있는 기능이 개별 쿼리에 대해 매우 유용합니다. – Abe

관련 문제