12.8. 두 번째 수준 캐시

12.8.1. 두 번째 수준 캐시 정보

두 번째 수준 캐시는 애플리케이션 세션 외부에서 지속되는 정보를 보관하는 로컬 데이터 저장소입니다. 캐시는 애플리케이션과 별도로 데이터를 유지하여 런타임을 개선하여 지속성 프로바이더가 관리합니다.

JBoss EAP는 다음과 같은 목적으로 캐싱을 지원합니다.

  • 웹 세션 클러스터링
  • 상태 저장 세션 빈 클러스터링
  • SSO 클러스터링
  • Hibernate 두 번째 수준 캐시
  • 자카르타 지속성 두 번째 수준 캐시
주의

각 캐시 컨테이너는 repldist 캐시를 정의합니다. 이러한 캐시는 사용자 애플리케이션에서 직접 사용해서는 안 됩니다.

12.8.1.1. 기본 두 번째 수준 캐시 공급자

Infinispan은 JBoss EAP의 기본 두 번째 수준 캐시 프로바이더입니다. Infinispan은 Apache 라이센스 2.0에서 사용할 수 있는 선택적 스키마가 있는 분산 메모리 내 키/값 데이터 저장소입니다.

12.8.1.1.1. 지속성 유닛에서 두 번째 수준 캐시 구성
참고

향후 JBoss EAP 릴리스와의 호환성을 보장하기 위해 persistence.xml 속성 덮어쓰기 대신 jenkinsfile 하위 시스템을 사용하여 캐시 구성을 사용자 지정해야 합니다.

지속성 유닛의 shared-cache-mode 요소를 사용하여 두 번째 수준 캐시를 구성할 수 있습니다.

  1. Red Hat CodeReady Studio에서 persistence.xml 파일을 생성하려면 Create a Simple Jakarta Persistence Application 을 참조하십시오.
  2. 다음을 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. 엔터티로컬 쿼리 캐시의 속성

속성설명

memory.size

개체 메모리 크기를 나타냅니다.

expiration.max_idle

캐시 항목이 캐시에서 유지 관리되는 최대 유휴 시간(밀리초)을 나타냅니다.

expiration.lifespan

캐시 항목이 만료된 후 최대 수명(밀리초)을 나타냅니다. 기본값은 60초입니다. 무한한 수명을 -1을 사용하여 지정할 수 있습니다.

expiration.wake_up_interval

캐시에서 만료된 항목을 제거하기 위해 후속 실행 간 간격(밀리초)을 나타냅니다. -1을 사용하여 만료를 비활성화할 수 있습니다.