mybatis cache
[레퍼런스 번역 문서 참조]
cache
하나의 간단한 구문에 다음과 같은 순서로 영향을 준다.
<cache
eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>
좀더 많은 프로퍼티가 셋팅된 이 설정은 60초마다 캐시를 지우는 FIFO 캐시를 생성한다. 이 캐시는 결과 객체 또는 결과 리스트를 512개까지 저장하고 각 객체는 읽기 전용이다. 캐시 데이터를 변경하는 것은 개별 쓰레드에서 호출자간의 충돌을 야기할 수 있다.
사용가능한 캐시 전략은 4가지이다.
flushInterval 은 양수로 셋팅할 수 있고, 밀리세컨드로 명시되어야 한다. 디폴트는 셋팅되지 않으나, 플러시(flush) 주기를 사용하지 않으면, 캐시는 오직 구문이 호출될때마다 캐시를 지운다.
size 는 양수로 셋팅할 수 있고 캐시에 객체의 크기를 유지하지만 메모리 자원이 충분해야 한다. 디폴트 값은 1024이다.
readOnly 속성은 true 또는 false 로 설정 할 수 있다. 읽기 전용 캐시는 모든 호출자에게 캐시된 객체의 같은 인스턴스를 리턴 할 것이다. 게다가 그 객체는 변경할 수 없다. 이건 종종 성능에 잇점을 준다. 읽고 쓰는 캐시는 캐시된 객체의 복사본을 리턴 할 것이다. 이건 조금 더 늦긴 하지만 안전하다. 디폴트는 false 이다..
cache
MyBatis 는 쉽게 설정가능하고 변경가능한 쿼리 캐싱 기능을 가지고 있다. MyBatis 3 캐시 구현체는 좀더 강력하고 쉽게 설정할 수 있도록 많은 부분이 수정되었다.<cache/>
성능을 개선하고 순환하는 의존성을 해결하기 위해 필요한 로컬 세션 캐싱을 제외하고 기본적으로 캐시가 작동하지 않는다. 캐싱을 활성화하기 위해서, SQL 매핑 파일에 한줄을 추가하면 된다.
하나의 간단한 구문에 다음과 같은 순서로 영향을 준다.
매핑 구문 파일내 select 구문의 모든 결과가 캐시 될 것이다.
매핑 구문 파일내 insert, update 그리고 delete 구문은 캐시를 지울(flush) 것이다.
캐시는 Least Recently Used (LRU) 알고리즘을 사용할 것이다.
캐시는 스케줄링 기반으로 시간순서대로 지워지지는 않는다. (예를 들면. no Flush Interval)
캐시는 리스트나 객체에 대해 1024개의 참조를 저장할 것이다. (쿼리 메서드가 실행될때마다)
캐시는 읽기/쓰기 캐시처럼 처리될 것이다. 이것은 가져올 객체는 공유되지 않고 호출자에 의해 안전하게 변경된다는 것을 의미한다.
모든 프로퍼티는 cache 요소의 속성을 통해 변경가능하다. 예를 들면:
<cache
eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>
좀더 많은 프로퍼티가 셋팅된 이 설정은 60초마다 캐시를 지우는 FIFO 캐시를 생성한다. 이 캐시는 결과 객체 또는 결과 리스트를 512개까지 저장하고 각 객체는 읽기 전용이다. 캐시 데이터를 변경하는 것은 개별 쓰레드에서 호출자간의 충돌을 야기할 수 있다.
사용가능한 캐시 전략은 4가지이다.
LRU – Least Recently Used: 가장 오랜시간 사용하지 않는 객체를 제거디폴트 값은 LRU이다.
FIFO – First In First Out: 캐시에 들어온 순서대로 객체를 제거
SOFT – Soft Reference: 가비지 컬렉터의 상태와 강하지 않은 참조(Soft References )의 규칙에 기초하여 객체를 제거
WEAK – Weak Reference: 가비지 컬렉터의 상태와 약한 참조(Weak References)의 규칙에 기초하여 점진적으로 객체 제거
flushInterval 은 양수로 셋팅할 수 있고, 밀리세컨드로 명시되어야 한다. 디폴트는 셋팅되지 않으나, 플러시(flush) 주기를 사용하지 않으면, 캐시는 오직 구문이 호출될때마다 캐시를 지운다.
size 는 양수로 셋팅할 수 있고 캐시에 객체의 크기를 유지하지만 메모리 자원이 충분해야 한다. 디폴트 값은 1024이다.
readOnly 속성은 true 또는 false 로 설정 할 수 있다. 읽기 전용 캐시는 모든 호출자에게 캐시된 객체의 같은 인스턴스를 리턴 할 것이다. 게다가 그 객체는 변경할 수 없다. 이건 종종 성능에 잇점을 준다. 읽고 쓰는 캐시는 캐시된 객체의 복사본을 리턴 할 것이다. 이건 조금 더 늦긴 하지만 안전하다. 디폴트는 false 이다..
댓글
댓글 쓰기