12.8. 두 번째 수준 캐시
12.8.1. 두 번째 수준 캐시 정보
두 번째 수준 캐시는 애플리케이션 세션 외부에서 지속되는 정보를 보관하는 로컬 데이터 저장소입니다. 캐시는 애플리케이션과 별도로 데이터를 유지하여 런타임을 개선하여 지속성 프로바이더가 관리합니다.
JBoss EAP는 다음과 같은 목적으로 캐싱을 지원합니다.
- 웹 세션 클러스터링
- 상태 저장 세션 빈 클러스터링
- SSO 클러스터링
- Hibernate 두 번째 수준 캐시
- 자카르타 지속성 두 번째 수준 캐시
각 캐시 컨테이너는 repl 및 dist 캐시를 정의합니다. 이러한 캐시는 사용자 애플리케이션에서 직접 사용해서는 안 됩니다.
12.8.1.1. 기본 두 번째 수준 캐시 공급자
Infinispan은 JBoss EAP의 기본 두 번째 수준 캐시 프로바이더입니다. Infinispan은 Apache 라이센스 2.0에서 사용할 수 있는 선택적 스키마가 있는 분산 메모리 내 키/값 데이터 저장소입니다.
12.8.1.1.1. 지속성 유닛에서 두 번째 수준 캐시 구성
향후 JBoss EAP 릴리스와의 호환성을 보장하기 위해 persistence.xml 속성 덮어쓰기 대신 jenkinsfile 하위 시스템을 사용하여 캐시 구성을 사용자 지정해야 합니다.
지속성 유닛의 shared-cache-mode 요소를 사용하여 두 번째 수준 캐시를 구성할 수 있습니다.
-
Red Hat CodeReady Studio에서
persistence.xml파일을 생성하려면 Create a Simple Jakarta Persistence Application 을 참조하십시오. 다음을
persistence.xml파일에 추가합니다.<persistence-unit name="..."> (...) <!-- other configuration --> <shared-cache-mode>SHARED_CACHE_MODE</shared-cache-mode> <properties> <property name="hibernate.cache.use_second_level_cache" value="true" /> <property name="hibernate.cache.use_query_cache" value="true" /> </properties> </persistence-unit>SHARED_CACHE_MODE요소에는 다음 값을 사용할 수 있습니다.-
ALL: 모든 엔터티는 캐시 가능한 것으로 간주해야 합니다. -
NONE: 어떠한 엔터티도 캐시 가능한 것으로 간주해서는 안 됩니다. -
ENABLE_SELECTIVE: 캐시 가능으로 표시된 엔터티만 캐시 가능으로 간주해야 합니다. -
DISABLE_SELECTIVE: not cacheable로 명시적으로 표시된 엔터티를 제외한 모든 엔터티는 캐시 가능으로 간주되어야 합니다. -
지정되지 않음: 동작이 정의되지 않았습니다. 공급자별 기본값은 적용 가능합니다.
-
예제: persistence.xml을 사용하여 엔터티 및 로컬 쿼리 캐시의 속성 변경
<persistence ... version="2.2">
<persistence-unit ...>
...
<properties>
<!-- Values below are not recommendations. Appropriate values should be determined based on system use/capacity. -->
<!-- entity default overrides -->
<property name="hibernate.cache.infinispan.entity.memory.size" value="5000"/>
<property name="hibernate.cache.infinispan.entity.expiration.max_idle" value="300000"/> <!-- 5 minutes -->
<property name="hibernate.cache.infinispan.entity.expiration.lifespan" value="1800000"/> <!-- 30 minutes -->
<property name="hibernate.cache.infinispan.entity.expiration.wake_up_interval" value="300000"/> <!-- 5 minutes -->
<!-- local-query default overrides -->
<property name="hibernate.cache.infinispan.query.memory.size" value="5000"/>
<property name="hibernate.cache.infinispan.query.expiration.max_idle" value="300000"/> <!-- 5 minutes -->
<property name="hibernate.cache.infinispan.query.expiration.lifespan" value="1800000"/> <!-- 30 minutes -->
<property name="hibernate.cache.infinispan.query.expiration.wake_up_interval" value="300000"/> <!-- 5 minutes -->
</properties>
</persistence-unit>
</persistence>
표 12.1. 엔터티 및 로컬 쿼리 캐시의 속성
| 속성 | 설명 |
|---|---|
|
| 개체 메모리 크기를 나타냅니다. |
|
| 캐시 항목이 캐시에서 유지 관리되는 최대 유휴 시간(밀리초)을 나타냅니다. |
|
| 캐시 항목이 만료된 후 최대 수명(밀리초)을 나타냅니다. 기본값은 60초입니다. 무한한 수명을 -1을 사용하여 지정할 수 있습니다. |
|
| 캐시에서 만료된 항목을 제거하기 위해 후속 실행 간 간격(밀리초)을 나타냅니다. -1을 사용하여 만료를 비활성화할 수 있습니다. |