1. 程式人生 > >Hibernate 二級快取和查詢快取

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屬性(二級快取區塊的名稱)