iBatisでキャッシュを利用する
ということで、マニュアルをYahoo先生の力をお借りして見てみました。
readOnly
まずキャッシュのモード?には、「Read-Only」と「Read/Write」が存在する。
もちろん単純なパフォーマンスならば、「Read-Only」が優れているとのこと。
ただしキャッシュするオブジェクトを変更する可能性があるならば、「Read/Write」にしないといけないよ。って当然ですが。
XMLの書き方は、後でまとめてね。
ちなみにデフォルトは「Read-Only」だそうだ。
type
次にタイプの話。タイプには以下の4種類があるとのこと。
LRU
「size」の指定、つまりキャッシュの保有数を指定できるようだ。
<cacheModel id="product-cache" type="LRU"> <property name=”size” value=”1000” /> </cacheModel>
FIFO
「size」に関しては、LRUと一緒。
<cacheModel id="product-cache" type="FIFO"> <property name=”size” value=”1000” /> </cacheModel>
MEMORY
JVMのメモリ管理に任せる設定?
To better understand the topic of reference types, please see the JDK documentation for java.lang.ref for more information about “reachability”.
以下の3つの「reference-type」によって、振る舞いが変わるとのこと。(たぶん)
- WEAK(default)
- 他のものでメモリを使用する必要のある際に、(未使用の場合には)GCによって解放の対象になるが、一般的にベストな設定。
- SOFT
- GCによって解放の対象にされやすい設定。メモリの枯渇に備えて、事前に解放対象になる。
- STRONG
- 明示的にflushされるまで、メモリ上にとどまる。
- オブジェクトが小さくて、静的で、頻繁に使用される場合には効率的。
- オブジェクトが大きい場合には、絶対的にむかない。
<cacheModel id="product-cache" type="MEMORY"> <property name=reference-type” value=WEAK” /> </cacheModel>
OSCACHE
iBatisでは、OSCache2.0エンジンを使用するためのプラグインが提供されているらしく、それを利用するという設定らしい。
クラスパスに「oscache.properties」ファイルを格納すれば、その設定に従って動作をするとのこと。ようはOSCACHEをそのまま使うからね、ってことで詳細は、http://www.opensymphony.com/oscache/を見ろって。
<cacheModel id="product-cache" type="OSCACHE"> </cacheModel>
serializable
「Read/Write」でしか使えないとのことでパス。
デフォルトは"false"とのこと。
まとめると
<cacheModel id="product-cache" type ="LRU" readOnly=”true” serialize=”false”> <flushInterval hours="24"/> <flushOnExecute statement="insertProduct"/> <flushOnExecute statement="updateProduct"/> <flushOnExecute statement="deleteProduct"/> <property name=”cache-size” value=”1000” /> </cacheModel> <select id=”getProductList” cacheModel=”product-cache”> select * from PRODUCT where PRD_CAT_ID = #value# </select>
これを見てわかるとおり、この設定はマッピングごとに行うことになる。
ちなみにSQL Map XML Configuration Fileに「cacheModelsEnabled」というパラメータがあって、SqlMapClient全体での使用可・不可を設定できる。ちなみにデフォルトは"true"なので使用可になる。