Hibernate 效能優化
Session: 一級快取
sessionFactory: 二級快取
查詢快取: 三級快取
一級快取快取實體物件
Iterator 和 list的區別
Iterator剛開始取主鍵,任何時候用到才取出來,所以Iterator利用快取,不會發出查詢實體的sql(from)
List不會利用快取,每次用到都會發出sql
Session消亡的時候,快取消亡
查詢快取Query.setCacheable(true).list()
EhCache 配置檔案hibernate-distribution-3.3.2.GA\project\etc\ehcache.xml
<defaultCache
maxElementsInMemory="10000" //最多多少個物件
eternal="false" //記憶體物件的永久性
timeToIdleSeconds="120" //期限(物件不活動的期限)
timeToLiveSeconds="120" //生存期
overflowToDisk="true" /> // 快取滿時,放到硬碟<diskStorepath="java.io.tmpdir"/>
EhCache.jar
hibernate-distribution-3.3.2.GA\lib\optional\ehcache
XML:<property name=” hibernate.cache.use_second_level_cache”>true </property>
<property name=” hibernate.cache.provider_class”> org.hibernate.cache.EhCacheProvider </property>
Annotation: 在class設定@Cache(usage= CacheConcurrencyStrategy.READ_WRITE )
快取演算法
l 最佳(optimal)置換演算法: 選擇那些永不使用的,或者是在最長時間內不再被訪問的頁面置換出去.即要確定哪一個頁面是未來最長時間內不再被訪問
l 先進先出(FIFO): 利用佇列,先進先出
l 最近最久未使用置換演算法LRU (Least Recently Used): 系統在每個頁面設定一個訪問欄位,用以記錄這個頁面自上次被訪問以來所經歷的時間T,重複訪問時重新設為0,選擇T最大的頁面淘汰。利用棧實現,棧底的T最大.
l 最近未用置換NUR(Not UsedRecently): 為每個頁面置一個訪問位,將記憶體中的所有頁面都通過連結指標鏈成一個迴圈佇列。當某頁被訪問的時,若為‘1’,暫不換出此頁,置為‘0’。如果是‘0’則淘汰。