IBatis Cache

From JCFWiKi

Jump to: navigation, search

그림:check.gif

  • 산출물 : iBatis Cache 설정하기
  • 작성자 : 송희정
  • 최초작성일 : 2008/05/20
  • 최종작성일 : 2008/05/20

Copyright © 2008 Daewoo Information Systems Co., Ltd.

그림:forbidden.gif

빈번히 쓰이는 데이터의 캐시처리에 관한 문서이다.

그림:information.gif

목차

[편집] 개요

코드와 같이 select 하는 데이터가 빈번하게 사용되는 경우, 조회시 매번 DB IO를 발생시키게 된다.
어플리케이션 성능을 저하시키는 DB IO를 줄이고, 대신 select 한 데이터를 캐시하고 있게 되면 성능개선효과를 가져올 수 있다.
Statement의 where 조건을 기준으로 데이터를 캐시한다.

[편집] 캐시 설정

[편집] 저장 옵션

  • imlementation(캐시 모델이 저장되는 형태)은 다음 네 가지 중 선택한다.
    • MEMORY - GC가 메모리에서 삭제할 때까지 캐시를 메모리에 저장해둔다.
    • FIFO - 먼저 만들어진 캐시를 먼저 삭제한다.
    • LRU - 가장 오랫동안 사용되지 않는 캐시부터 삭제한다.
    • OSCACHE - OpenSymphony Cache를 사용한다.

[편집] 하위 옵션

  • flushInterval
    • 특정 시간단위마다 cache를 삭제하기 위한 옵션이다.
    • hours, minutes, seconds, milliseconds등을 지정할 수 있다.
  • flushOnExecute
    • 지정한 statement가 실행될때 cache를 삭제하는것을 의미한다.
    • Namespace를 사용하는 상황이라면 Namespace.statement 로 지정을 해줘야 한다.
  • property의 size
    • 해당 cacheModel이 소유하고 있을 cache의 최대 갯수를 의미한다.
  • Cache 갱신 조건(예제)

매 24시간 주기로 갱신 insertProduct, updateProduct, deleteProduct 문이 실행시 갱신 Cache 사이즈: 1000 Kbyte

<cacheModel id="product-cache" imlementation="LRU">
  <flushInterval hours="24"/>
  <flushOnExecute statement="insertProduct"/>
  <flushOnExecute statement="updateProduct"/>
  <flushOnExecute statement="deleteProduct"/>
  <property name="size" value="1000" />
</cacheModel>

위와 같이 캐시 모델을 설정하면, 결과값을 캐시 적용하기 위해 statement에 chcheModel로 지정하도록 한다.

<statement id="getProductList" parameterClass="int"  cacheModel="product-cache">
	select * from PRODUCT where PRD_CAT_ID = #value#
</statement>