Hibernate 二級快取和查詢快取
一級快取:
1,在session上面有一個一級快取;一級快取的生命週期和session相同,一級快取最大生命週期就是一個執行緒;在web環境下面,session的最大生命週期就是一次請求;
2,一級快取可以用來幹嘛?
1,只能有限的提高一點點系統性能;
2,最重要的功能:提供給了一個臨時存放持久化物件的空間;
在更多的情況下,我們要提高的效能的資料往往是不同請求,請求的相同資料;
二級快取概念:
1,生命週期為整個應用的快取(二級快取是sessionFactory上的快取,能提供整個應用中所有的session使用,可以在不同的請求之間共享快取的資料)
2,所有的get,load方法,總是先查一級快取,再查二級快取,如果都沒有,再去資料庫裡面查詢。
附加:二級快取的原理;
二級快取其實就是個快取.什麼是快取?其實簡單理解就是一個Map;
4,二級快取有一些效能的指標
1、命中率(總的從二級快取中取得的數量/總的取的數量)
2、最大物件數量;
3、最大空閒時間;
4, 移除資料策略;FIFO FILO LRU
5,二級快取實際上就是一個快取,所以,hibernate並沒有實現自己的二級快取框架,而是用的開源的快取框架。
Hibernate中二級快取的使用:
1,常見的開源的二級快取框架
2,Ehcache作為hibernate二級快取
1,ehcache相關jar包;
2,拷貝ehcache.xml(ehcache的配置檔案);
3,告訴hibernate,我現在用的是哪一個快取框架;
4,hibernate中配置好二級快取:
5,指定哪些實體物件需要二級快取: 1,在對映檔案中新增;
3,usage的作用:usage代表物件快取策略;怎麼使用二級快取;
1,usage="read-only" :放到二級快取裡面的物件是隻讀,不能被直接修改(效能最高)
2,usage="read-write":允許讀寫(對併發支援較好)
3,usage="nonstrict-read-write":允許讀寫,但是在併發事務情況下會產生髒資料
4,usage="transactional" :允許讀寫,並且支援全事務(只能在ApplicationServer環境下有用)
4,ehcache的配置:
1,maxElementsInMemory:該快取池放在記憶體中最大的快取物件個數;
2,eternal:是否永久有效,如果設定為true,記憶體中物件永不過期;
3,timeToIdleSeconds:快取物件最大空閒時間,單位:秒;
4,timeToLiveSeconds:快取物件最大生存時間,單位:秒;
5,overflowToDisk:當記憶體中物件超過最大值,是否臨時儲存到磁碟;
6,maxElementsOnDisk:能儲存到磁碟上最大物件數量;
7,diskExpiryThreadIntervalSeconds:磁碟失效執行緒執行時間間隔,預設是120秒
8,memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理記憶體。
預設策略是LRU(最近最少使用),可以設定為FIFO(先進先出)或是LFU(較少使用)
說明:
1,預設情況下,所有的物件都是快取在ehcache的defaultCache中;
2,一定注意,dafaultCache,eternal不能設定為true
3,把一個類放在指定的二級快取區域中(可以細粒度的管理二級快取的效能);
1,給一個類新增region屬性(二級快取區塊的名稱)