MyBatis에는 매우 쉽게 구성 및 사용자 정의 할 수있는 매우 강력한 쿼리 캐시 기능이 포함되어 있습니다. 기본적으로 캐시는 활성화되지 않습니다. 레벨 2 캐시를 활성화하려면 SQL 매핑 파일에 라인을 추가해야합니다.
<캐시/>
그게 말 그대로입니다. 이 간단한 진술의 효과는 다음과 같습니다.
1. 매핑 명령문 파일의 모든 선택 문은 캐시됩니다.
2. 문에서 모든 삽입, 업데이트 및 삭제 된 문장 파일에서 캐시가 새로 고침됩니다.
3. 캐시는 가장 최근에 사용 된 LRU (최근에 가장 적은 최소 사용) 알고리즘을 사용하여 재조정됩니다.
4. 시간표 (플러시 간격, 새로 고침 간격 없음)에 따르면, 캐시는 연대순으로 새로 고침되지 않습니다.
5. 캐시 저장 1024 목록 수집 또는 객체에 대한 참조 (쿼리 메소드가 반환하는 내용에 관계없이).
6. 캐시는 읽기/쓰기 (읽기 가능/쓰기 가능) 캐시로 간주됩니다. 즉, 객체 검색은 공유되지 않으며 다른 발신자 또는 스레드의 잠재적 수정을 방해하지 않고 발신자가 안전하게 수정할 수 있습니다.
이러한 모든 속성은 캐시 요소의 속성에 의해 수정 될 수 있습니다. 예를 들어:
<CACHE EVICTION = "FIFO"FlushInterVal = "60000"size = "512"readOnly = "true"/>
이 고급 구성은 FIFO 캐시를 생성하고 60 초마다 새로 고침하여 결과 객체 또는 목록에 512 참조를 저장하고 반환 된 객체는 읽기 전용으로 간주되므로 다른 스레드의 발신자간에 수정하면 충돌이 발생합니다.
이용 가능한 검색 전략은 다음과 같습니다.
기본값은 LRU입니다.
FlushInterval은 모든 양의 정수로 설정할 수 있으며 합리적인 밀리 초 기간을 나타냅니다. 기본값은 설정되지 않으며, 즉 새로 고침 간격이 없으며 문을 호출 할 때만 캐시가 새로 고침됩니다.
크기 (참조 수)는 캐시 캐시의 객체 수와 실행중인 환경에서 사용 가능한 메모리 리소스 수를 기억하면서 긍정적 인 정수로 설정할 수 있습니다. 기본값은 1024입니다.
Readonly 속성은 True 또는 False로 설정할 수 있습니다. 읽기 전용 캐시는 캐시 개체의 동일한 인스턴스를 모든 발신자에게 반환합니다. 따라서 이러한 객체는 수정할 수 없습니다. 이것은 중요한 성능 이점을 제공합니다. 읽을 수 있고 쓰기 쉬운 캐시는 캐시 개체의 사본을 반환합니다 (직렬화). 이것은 느리지 만 안전하므로 기본적으로 거짓입니다.
사용자 정의 캐시 사용
이러한 사용자 정의 캐시 방법 외에도 자신의 캐시를 구현하거나 다른 타사 캐시 시나리오에 대한 어댑터를 만들어 캐시 동작을 완전히 무시할 수도 있습니다.
<cache type =”com.domain.something.myCustomCache”/>
이 예제는 사용자 정의 캐시 구현을 사용하는 방법을 보여줍니다. 유형 속성으로 지정된 클래스는 org.mybatis.cache.cache 인터페이스를 구현해야합니다. 이 인터페이스는 Mybatis 프레임 워크의 많은 복잡한 인터페이스 중 하나이지만 단순히 그 일을 단순히 제공하는 것이 좋습니다.
공개 인터페이스 캐시 {string getId (); int getsize (); void putobject (객체 키, 객체 값); 개체 getObject (객체 키); 부울 하스키 (객체 키); 객체 removeObject (객체 키); void clear (); readwritelock getReadWritElock (); } 참조 캐시
어쩌면 언젠가는 네임 스페이스에서 동일한 캐시 구성과 인스턴스를 공유하고 싶을 것입니다. 이 경우 캐시 -ref 요소를 사용하여 다른 캐시를 참조 할 수 있습니다.
<Cache-Ref Namespace =”com.someone.application.data.somemapper”/>