2013-02-04 2 views
0

읽었습니다 this post.이 게시물에 제안 된대로 전체 개체를 가져올 수 없습니다. MIN, MAX, Count 값을 얻고 있습니다. 그래서 새 게시물. 다음은 내가 원했던 것과 가지고있는 것입니다.스칼라 쿼리를위한 최대 절전 모드 캐시

  1. My Spring 앱은 DB (MySQL)를 변경하지 않습니다. 단지 데이터를 읽습니다. DB의 기존 데이터에 대한 변경 사항을 인식하지 못합니다.
  2. 내 모든 쿼리는 스칼라 데이터를 반환합니다. 전체 개체가 아닙니다. (예 : Select employee.name,office.address,MIN(employee.rec) from ... where..)

  3. 내 쿼리를 캐시하고 싶습니다. 그래서 나는 최대 절전 모드 구성에서 쿼리 캐시를 활성화했다. 그리고 내 이름 붙여진 쿼리에 cacheable="true"을 추가했다.

4. 제 2 수준 캐시를 사용합니다.

5. 퍼시스턴스 클래스에 대해 아래의 주석을 추가하십시오.

@Cacheable 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 

6. 24 시간마다 캐시를 ​​새로 고침하고 싶습니다. 업데이트 된 timeToLiveSeconds은 ehcache.xml defaultCache에 있습니다.

올바른 방법입니까? 쿼리가 쿼리 캐시의 두 번째 수준 캐시에 도달하는지 여부를 확인하는 방법

업데이트 : 통계를 추가 했으므로 2 차 수준 캐시에 히트/미스가 없습니다.

+0

없다 : 두 번째 레벨 캐시의 히트 수를 확인하려면

<property name="hibernate.show_sql" value="true"/> <property name="hibernate.generate_statistics" value="true"/> 

. 캐시가 히트되었는지 알아 보려면 (hibernate.show_sql 속성을 true로 설정하여) SQL 로깅을 켜고 쿼리가 생성되는지 확인하십시오. –

+0

감사합니다. @JBNizet. 내 모든 다른 구성이 올바른 것으로 가정합니다 :) – dj8485

답변

1

SQL 로깅 및 통계 생성을 켭니다. SQL 쿼리 로깅이 표시되면 캐시가 작동하지 않는다는 의미입니다. 당신이 당신의 쿼리에서 그들을 반환하지 않습니다 때문에 아무 소용이, 특정 회사의 캐시 만드는이

session.getSessionFactory().getStatistics().getSecondLevelCacheHitCount() 
+0

답장을 보내 주셔서 감사합니다. 스칼라 쿼리와 관련하여 두 번째 레벨 캐시에 영향을 미칩니 까? – dj8485

+0

당신은 이것을 보길 원할 것입니다 : http://stackoverflow.com/questions/8480268/how-query-cache-works-for-scalar-results – ogzd

+0

또한 이것, https://forum.hibernate.org /viewtopic.php?f=1&t=941773 – ogzd