<cacheModel id="oneday_cache" type="LRU" readOnly="false" serialize="true">
<flushInterval hours="24"/>
<flushOnExecute statement="updateMyDate"/>
<property name="size" value="200"/>
</cacheModel>
1 屬性readOnly如果不寫,默認(rèn)是true,這時(shí)的緩存效果無疑最好,因?yàn)橄到y(tǒng)不需要考慮更新操作引起緩存與實(shí)際數(shù)據(jù)不一致的問題,只讀緩存的例子是固化到數(shù)據(jù)庫(kù)中的一些配置參數(shù)表。但是,通常我們想緩存的數(shù)據(jù)是需要增刪改的,這時(shí)務(wù)必記得要加上 readOnly = "false";
2 屬性serialize,如果不寫,默認(rèn)為false, 將它設(shè)為true,可以提高整體應(yīng)用(而不僅僅是每個(gè)Session)的性能。 這種緩存為每一個(gè)Session返回緩存對(duì)象不同的實(shí)例(復(fù)本)。因此每一個(gè)Session都可以安全修改返回的對(duì)象. 注意,此時(shí)readOnly必須為false。
如果你把它設(shè)為 true ,記得檢查兩件事,一件事是緩存中存放的對(duì)象(你想查詢的POJO)必須是可序列化的, 即實(shí)現(xiàn)Serializable接口。如果你有一個(gè)復(fù)雜對(duì)象屬性,它也必須滿足這個(gè)規(guī)則,你的整個(gè)對(duì)象樹必須是可序列化的。
另一件事是關(guān)閉sql-map-config中的延遲加載屬性,即lazyload=false,原因是,它使用了動(dòng)態(tài)代理機(jī)制, 那個(gè)代理對(duì)象并不是Serializable的。
緩存類型的最佳適應(yīng)情形:
MEMORY 沒有統(tǒng)一的對(duì)象重用模式的應(yīng)用,或內(nèi)存不足的應(yīng)用。
LRU 在較長(zhǎng)的期間內(nèi),用戶經(jīng)常使用某些特定對(duì)象。
FIFO 用戶在短時(shí)間內(nèi)持續(xù)引用特定的查詢,而后很可能不再使用。
根據(jù)個(gè)人實(shí)踐,內(nèi)存充足時(shí)使用LRU,否則使用MEMORY(WEAK)通常能獲得較好的效果。
<cacheModel type="OSCACHE" id="cache">
<flushInterval hours="24"/>
<flushOnExecute statement="WapIndex.delete"/>
<flushOnExecute statement="WapIndex.update"/>
<property value="100" name="size"/>
</cacheModel>
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。