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으로 설정되여 있기때문에 가져다 쓰면 된다.
'DataBase' 카테고리의 다른 글
[DynamoDB] AWS Lambda을 이용하여 DynamoDB Table간 실시간 동기화하기 (0) | 2022.01.08 |
---|---|
[DataBase] Order by에서 null 값 처리 (0) | 2022.01.06 |
[Spring] DynamoDB Enhanced Client 사용 기 (feat. AWS SDK V2) (0) | 2021.12.23 |
[Python] DynamoDB 및 Mysql 접근법 (0) | 2021.12.21 |
[DynamoDB] Partition Key 설계 (0) | 2021.12.21 |
Comment