Hibernate缓存和ehcache
緩存的概念
???????? 計算機領域非常通用的概念。它介于應用程序和永久性數據存儲源(如硬盤上的文件或者數據庫)之間,其作用是降低應用程序直接讀寫永久性數據存儲源的頻率,從而提高應用的運行性能。緩存中的數據是存儲源總的數據的拷貝。緩存的物理介質通常是內存。
?
Hibernate中提供了兩個級別的緩存
???????? Session級別的緩存
???????? 它是屬于事務范圍的緩存。這一級別的緩存有Hibernate管理的,一般情況下午需進行干預。
???????? SessionFactory級別的緩存
???????? 它是屬于進程范圍的緩存
?
啟用二級緩存的條件
很少被修改
?
很多系統模塊都要用到
?
不是私有的數據,是共享的
?
配置二級緩存
1、? 拷貝ehcache-1.5.0.jar到當前工程的lib目錄下
2、? 開啟二級緩存
3、? 要指定緩存的供應商
<property name=”hibernate.cache.provider_class”>org.hibernate.cache.EhCacheProvider</property>
4、? 指定使用二級緩存的類
方法一? 在使用類的*.hbm.xml配置
選擇需要使用二級緩存的持久化類,設置它的二級緩存的兵法訪問策略,<class>元素的cache子元素表明Hibernate會緩存對象的簡單屬性,但不會緩存集合屬性,若希望緩存集合屬性中的元素,必須在<set>元素中加入<cache>子元素
<class name=”cn.itcast.c3p0.Customer” table=”customers” lazy=”false”>
???????? <!—配置類級別的二級緩存à
???????? <cache usage=”read-write”/>
<set name=”orders” table=”orders” inverse=”true” fetch=”select” lazy=”false”>
???????? <!—配置集合級別的二級緩存à
???????? <cache usage=”read-write”/>
?
方法二?? 在hibernate.cfg.xml文件中配置(建議)
<!—指定使用二級緩存的類,放在maping下面à
<!---配置類級別的二級緩存-->
<class-cache class=”cn.itcast.c3p0.Customer” usage=”read-write”/>
<class-cache class=”cn.itcast.c3p0.Order” usage=”read-write”/>
?
<!—配置集合級別的二級緩存à
<collection-cache collection=”cn.itcast.c3p0.Customer.orders” usage=”read-write”/>
<diskStore path=”D:\cache”/>
<cache name=””
maxElementsInMemory=”100”
eternal=”false”
timeToIdleSeconds=”300”
timeToLiveSeconds=”600”
overflowToDisk=”true”
diskPersistent=”false”/>
</ehcache>
?
<diskStore path=”C:\\TEMP”/>:如果內存中的數據已經達到所要求存放的最大值的時候。這個時候,其他的數據將會以文件的形式存放到磁盤上。
?
<defaultCache>設置緩存的默認數據過期策略
?
<cache>設定具體的命名緩存的數據過期策略
每個命名緩存代表一個緩存區域,每個緩存區域有各自的數據過期策略。命名緩存機制使得用戶能夠在每個類以及類的每個集合的粒度上設置過期策略。
?
cache元素的屬性
name:設置緩存的名字,它的取值為類的全限定名或類的集合的名字
maxElementsInMemory:設置基于內存的緩存中可存放的對象最大數目
eternal:設置對象是否為永久的,true表示永不過期,此時將忽略
timeToIdleSeconds:設置對象空閑最長時間,以秒為單位,超過這個時間,對象過期。當對象過期是,EHCache會把它從緩存中清空。如果此值為0,表示對象可以無限期地處于空閑狀態。
TimeToLiveSeconds:設置對象生存最長時間,超過這個時間,對象過期。如果此值為0,表示對象可以無限期地存在緩存中,該屬性必須大于或等于timeToIdleSeconds屬性值。
OverflowToDisk:設置基于內在的緩存中的對象數目達到上限后,是否把溢出的對象寫到硬盤的緩存中。
diskPersistent當jvm結束時是否持久化對象true? false默認是false
diskExpiryThreadIntervalSeconds指定專門用于清除過期對象的監聽線程的輪詢時間。
?
總結
以上是生活随笔為你收集整理的Hibernate缓存和ehcache的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sessionFactory.getCu
- 下一篇: 如何在家制作网红小甜品奶盖麻薯?