A, MyBatis로 캐시
● MyBatis로이 아주 쉽게 사용자 정의하고 캐시를 구성 할 수있는 강력한 쿼리 캐싱 기능이 포함되어 있습니다. 쿼리 효율성 저장 리본이 크게 향상 될 수있다.
기본이 캐시에 의해 정의 ● MyBatis로 시스템 : 캐시 및 보조 캐시
○ 기본적으로 만 캐시에 돌았 다. (SQLSESSION 레벨 캐시, 또한 로컬 캐시라고도 함)
○ 수동으로 열고 구성에 보조 캐시 필요, 그가 기반 네임 스페이스 레벨 캐시.
○ 확장 성을 개선하기 위해, MyBatis로는 캐시 인터페이스 캐시를 정의합니다. 우리는 캐시를 구현하여 보조 캐시에 대한 인터페이스를 사용자 정의 할 수 있습니다
요약 : 캐시의 역할은 쿼리의 효율성을 개선하는 것입니다.
둘째, 캐시
● 레벨 캐시는 로컬 캐시라고합니다
○ 세션 데이터 동안 데이터베이스에 같은 쿼리를 로컬 캐시에 저장됩니다.
같은 데이터를 얻을해야하는 경우, 캐시에서 직접 수행 ○ 후, 필요 데이터베이스를 쿼리로 이동합니다 없습니다.
요약 : 캐시, 즉, 하나의 SQLSESSION 효과, 기본적으로 활성화되어 연결이 범위 세그먼트를 닫 연결하세요!
셋째, 보조 캐시
글로벌 캐시로 알려진 ● 보조 캐시는 캐시 범위는 L2 캐시의 탄생, 그래서 너무 낮습니다.
두 레벨의 메모리에 대응 ● 기반 네임 레벨 캐시 네임 스페이스 (공간)
● 작동 메커니즘
○ 대화 쿼리 데이터는이 데이터는 현재 세션에서 캐시에 저장됩니다;
현재 세션이 닫혀 있으면 ○,이 2 차 캐시에 저장됩니다;
○ 새로운 세션 쿼리 정보, 당신은 보조 캐시의 내용을 얻을 수 있습니다;
다른 ○ mappe 격리 데이터에서 자신의 해당 캐시 (지도)에 배치됩니다;
의 보조 캐시 단계를 엽니 다
다음과 같이 핵심 프로필에 설정 탭을 추가하십시오 :
< 설정 > < 설정 이름 = "cacheEnable" 값 = "true"를 /> </ 설정 >
는 SQL 매핑 파일에 한 줄을 추가합니다 :
< 캐시 />
또한 매개 변수를 사용자 정의 할 수 있습니다
< 캐시 축출 = "FIFO" flushInterval = "60000" 사이즈 = "512" readOnly 인 = "참" />
이 고급 구성 객체 또는리스트를 결과 (512)의 참조를 저장할, 새로 60 초 FIFO 버퍼를 생성하고, 판독 전용 주기로 간주 리턴 오브젝트 따라서 서로 다른 스레드에서 수정 될 수있다 발신자 충돌합니다.
명확한 전략을 사용할 수 :
- LRU - 최소가 최근에 사용한 : 오랜 시간 동안 사용되지 않은 제거합니다 개체를.
- 는 FIFO - 선입 : 위해 객체에 의해 캐시에 그들을 제거합니다.
- 소프트 - 소프트 참조 : 개체 참조 규칙 기반 가비지 컬렉터 부드러운 상태를 제거한다.
- WEAK - 약한 참조 : 더 적극적으로 가비지 컬렉터의 상태에 따라와 약한 참조의 규칙이 개체를 제거합니다.
기본 제거 정책은 LRU이다.
flushInterval (리프레시주기) 속성은 밀리 초 단위로 적절한 시간이어야 설정된 양의 정수 값으로 설정 될 수있다. 기본값은 새로 고침 간격 아니라고, 설정되지는 캐시는 경우에만 호출 문을 새로 고쳐집니다.
크기 (참조 번호) 속성은 메모리 리소스가 캐시 될 수 있는지 유의해야한다, 어떤 양의 정수로 설정하고 객체 사용 환경의 크기를 사용할 수있다. 기본값은 1024입니다.
readOnly 인 (읽기 전용) 속성을 true 또는 false로 설정할 수 있습니다. 읽기 전용 캐시 개체 인스턴스 캐시 된 모든 발신자에게 동일한를 반환합니다. 따라서, 이러한 개체는 수정할 수 없습니다. 이것은 상당한 성능 향상을 제공합니다. 그리고 읽기 - 쓰기 캐시는 캐시 된 객체 (직렬화)의 사본을 반환합니다. 일부 느린 속도로,하지만 더 보안 때문에 기본값은 false입니다.
참고 :
1. 모든 데이터는 첫 번째 세션이 제출 또는 폐쇄되는 경우에만, 캐시에 배치 될 보조 캐시에 제출 될 것입니다!
보조 캐시가 켜져있는 경우 2. MyBatis로는 보조 캐시에서 데이터를 추출하기 시작합니다. 데이터가 보조 캐시에서 발견되지 않는 경우, 캐시를 다시 검색 할 수 있습니다. 하나는 캐시 데이터를 찾을 수 없습니다, 당신은 데이터베이스를 쿼리로 이동하고 캐시에 쿼리 결과를 저장합니다.