Hibernate L2 Cache - Region 별 저장 및 통계 정보를 이용하기

Hibernate L2 Cache는 기본적인 설정으로는 default 영역에 모든 데이터가 저장된다. 이렇게 저장되면 정확히 cache가 동작여부를 알 수 없다. 분산 캐시를 구성하면 더더욱 확인하기 어렵다. 이를 정확히 확인 하기 위해서는 cache를 entity별로 Region를 설정하고 각 Region 의 통계 정보를 이용하면 된다.

Region 설정

@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "Foo")

@Cache 이노테이션에 region 값을 넣으면 “Foo” region이 생성된다.

설정된 Region에 저장

@QueryHints(value ={@QueryHint(name = HINT_CACHEABLE, value = "true"),
@QueryHint(name = HINT_CACHE_REGION , value = "Foo")})
fun existsFooByName(name: String): Boolean;

@QueryHint의 HINT_CACHE_REGION 값을 위에서 설정한 값으로 설정하면 Foo Region으로 데이터가 저장된다.

통계정보를 이용

Hibernate의 statistics 정보를 이용하여 Hit, Miss, Put count를 Region 별로 얻을 수 있다.

class HibernateHelper(
private val sessionFactory: SessionFactory
){
    fun getHibernateHitMiss(){
            val cacheRegionNames = sessionFactory.statistics.secondLevelCacheRegionNames
        cacheRegionNames.foreach{
            val cachaStatistics = sessionFactory.statistics.getCacheRegionStatistics(it)
            println(cachaStatistics.regionName)
            println(cachaStatistics.hitCount)
            println(cachaStatistics.missCount)
            println(cachaStatistics.putCount)
        }
    }
}

통계정보는 SessionFactory부터 얻을 수 있다. 이미 hibernate에서는 Bean으로 설정되여 있기때문에 가져다 쓰면 된다.

https://www.baeldung.com/hibernate-second-level-cache