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屬性(二級緩存區塊的名稱)
總結
以上是生活随笔為你收集整理的Hibernate 二级缓存和查询缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电子政务建设模式的演进
- 下一篇: CPU的工作原理浅析