成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hibernate緩存簡介及分類

開發 后端
本文介紹Hibernate緩存。HIBERNATE中的CACHE有兩級,一級是在Session范圍內的CACHE,另一級CACHE是在SessionFactory范圍的。

一、Hibernate緩存簡介  Cache In Hibernate

HIBERNATE中的CACHE有兩級.

一級是在Session范圍內的CACHE. 即每個Session有自己的一個CACHE, 當前操作的對象都會被保留在CACHE中. 但是Session關閉后這個CACHE也就沒有. 可見這級CACHE的生命期是很短的. (使用id進行關鍵字存儲:緩存的key就是ID,value是POJO)(緩存的是實體對象)

另一級CACHE是在SessionFactory范圍的, 可以被來自同一個SessionFactory的Session共享. 在HIBERNATE的文檔中稱其為SECOND LEVEL CACHE. 顯然后者的優勢較明顯, 也比較復合當前的使用環境.   它可以使用不同的緩存實現,如EhCache、JBossCache、OsCache等 (二級緩存是緩存實體對象的)

還有一個類型的CACHE就是QueryCache. 它的作用就是緩存一個Query以及Query返回對象的Identifier以及對象的類型. 有了QueryCache后就可以高效的使用SECOND LEVEL CACHE.

hibernate緩存查詢(hibernate默認是關閉的)
查詢緩存是針對普通屬性結果集的緩存
對實體對象的結果集只緩存id
查詢緩存的生命周期,當前關聯的表發生修改,那么查詢緩存生命周期結束

查詢緩存的配置和使用:

1. 啟用查詢緩存:在hibernate.cfg.xml中加入:

  1. < property name=”hibernate.cache.use_query_cache”>true< /property>   

2. 在程序中必須手動啟用查詢緩存,如:query.setCacheable(true);

QueryCache用來緩存查詢語句, 及查詢結果集中對象的Identifier與Type. 當再次使用已緩存的Query時, 就可以通過對象的Identifier與Type在SECOND LEVEL CACHE中查找實際的對象.

對于查詢緩存來說,緩存的key是根據hql生成的sql,再加上參數,分頁等信息(可以通過日志輸出看到,不過它的輸出不是很可讀,最好改一下它的代碼)。

注:一級緩存也叫session級的緩存或事務緩存。Hibernate二級緩存也稱為進程級的緩存或SessionFactory級的緩存。二級緩存是全局緩存,它可以被所有的session共享。二級緩存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二級緩存。

二、Hibernate緩存的范圍

Hibernate緩存的范圍分為3類:
1.事務范圍
     事務范圍的緩存只能被當前事務訪問,每個事務都有各自的緩存,緩存內的數據通常采用相互關聯的對象形式.緩存的生命周期依賴于事務的生命周期,只有當事務結束時,緩存的生命周期才會結束.事務范圍的緩存使用內存作為存儲介質,一級緩存就屬于事務范圍.
2.應用范圍
     應用程序的緩存可以被應用范圍內的所有事務共享訪問.緩存的生命周期依賴于應用的生命周期,只有當應用結束時,緩存的生命周期才會結束.應用范圍的緩存可以使用內存或硬盤作為存儲介質,二級緩存就屬于應用范圍.
3.集群范圍
     在集群環境中,緩存被一個機器或多個機器的進程共享,緩存中的數據被復制到集群環境中的每個進程節點,進程間通過遠程通信來保證緩存中的數據的一致,緩存中的數據通常采用對象的松散數據形式.

三、Hibernate緩存的方式

有四種,分別為:

CacheConcurrencyStrategy.NONE

CacheConcurrencyStrategy.READ_ONLY,只讀模式,在此模式下,如果對數據進行更新操作,會有異常;

CacheConcurrencyStrategy.READ_WRITE,讀寫模式在更新緩存的時候會把緩存里面的數據換成一個鎖,其它事務如果去取相應的緩存數據,發現被鎖了,直接就去數據庫查詢;

CacheConcurrencyStrategy.NONSTRICT_READ_WRITE,不嚴格的讀寫模式則不會的緩存數據加鎖;

CacheConcurrencyStrategy.TRANSACTIONAL,事務模式指緩存支持事務,當事務回滾時,緩存也能回滾,只支持JTA環境。

緩存的注釋寫法如下,加在Entity的java類上:

@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)

四、Hibernate緩存的管理

一級緩存的管理:
evit(Object obj)  將指定的持久化對象從一級緩存中清除,釋放對象所占用的內存資源,指定對象從持久化狀態變為脫管狀態,從而成為游離對象. 
clear()  將一級緩存中的所有持久化對象清除,釋放其占用的內存資源 
contains(Object obj) 判斷指定的對象是否存在于一級緩存中. 
flush() 刷新一級緩存區的內容,使之與數據庫數據保持同步.

二級緩存的管理:    

evict(Class arg0, Serializable arg1)  將某個類的指定ID的持久化對象從二級緩存中清除,釋放對象所占用的資源.

evictCollection(String arg0)  將指定類的所有持久化對象的指定集合從二級緩存中清除,釋放其占用的內存資源.

如何避免一次性大量的實體數據入庫導致內存溢出
*先flush,再clear

如果數據量特別大,考慮采用jdbc實現,如果jdbc也不能滿足要求,可以考慮采用數據庫本身的特定導入工具

五、什么樣的數據不適合放在二級緩存中來? 

下面這幾種情況就不適合加載到二級緩存中: 
1.經常被修改的數據 
2.絕對不允許出現并發訪問的數據 
3.與其他應用共享的數據 
下面這己種情況合適加載到二級緩存中: 
1.數據更新頻率低 
2.允許偶爾出現并發問題的非重要數據 
3.不會被并發訪問的數據 
4.常量數據 
5.不會被第三方修改的數據

六、二級緩存的配置

Hibernate的二級緩存功能是靠配置二級緩存插件來實現的,Hibernate為了集成這些插件,Hibernate提供了org.hibernate.cache.CacheProvider借口,它充當緩存插件與Hibernate之間的適配器 .

常用的二級緩存插件
EHCache  org.hibernate.cache.EhCacheProvider
OSCache  org.hibernate.cache.OSCacheProvider
SwarmCahe  org.hibernate.cache.SwarmCacheProvider
JBossCache  org.hibernate.cache.TreeCacheProvider

設置hibernate.cache.provider_class。

我們這里用ehcache,如
hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider
由于這是HIBERNATE默認的CACHE提供者, 所以無須做什么設置.

只要在src中添加ehcache的配置文件ehcache.xml:

  1. < ehcache>   
  2.  
  3.     < diskStore path="java.io.tmpdir"/>    
  4.  
  5.  
  6.     < defaultCache   maxElementsInMemory="10000"   eternal="false"  timeToIdleSeconds="120"          timeToLiveSeconds="120"  overflowToDisk="true"   />     
  7.  
  8.  
  9.     < cache name="goncha.hb.bean.Person"   maxElementsInMemory="10"       eternal="false"      
  10.  
  11.         timeToIdleSeconds="100"  timeToLiveSeconds="100"  overflowToDisk="false"   />       
  12.  
  13.       < cache name="goncha.hb.bean.Address"  maxElementsInMemory="10"     eternal="false"      
  14.  
  15.         timeToIdleSeconds="100"  timeToLiveSeconds="100"  overflowToDisk="false"    />       
  16.  
  17. < /ehcache>    

【編輯推薦】

  1. Hibernate中generator屬性的意義
  2. hibernate Key Generator 主鍵生成方式
  3. Hibernate的主鍵生成機制
  4. hibernate的Query cache
  5. Hibernate中hbm的generator屬性
     
責任編輯:book05 來源: 博客大巴
相關推薦

2009-07-02 09:23:27

Hibernate緩存

2009-06-26 16:19:32

Hibernate實現

2009-06-12 14:40:38

Hibernate AHibernate接口

2009-09-24 16:53:47

Hibernate A

2009-06-29 08:48:41

Hibernate緩存

2009-09-27 09:46:45

Hibernate會話

2009-09-29 17:00:08

Hibernate c

2009-09-21 13:19:06

Hibernate s

2009-09-25 09:04:27

Hibernate類型

2012-02-03 11:31:33

HibernateJava

2009-09-25 13:51:13

Hibernate S

2009-09-25 10:25:54

Hibernate緩存

2009-06-17 15:43:03

Hibernate緩存

2009-09-23 17:03:08

Hibernate S

2009-09-24 08:48:54

Hibernate技術

2012-12-17 14:54:55

算法緩存Java

2009-06-02 17:18:10

hibernate框架簡介

2009-09-22 10:50:04

Hibernate c

2009-09-22 11:24:07

Hibernate查詢

2021-11-30 10:58:52

算法緩存技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产一区二区三区av片 | 天天搞天天操 | 久久亚洲精品视频 | 国产精品2区 | 日韩一区二区在线免费观看 | 欧美一级欧美三级在线观看 | 美女久久久久久久久 | 久久九精品 | 在线看免费的a | 精品1区2区3区 | 国产精品日韩欧美一区二区三区 | 真人女人一级毛片免费播放 | 影音先锋中文字幕在线观看 | 亚洲毛片网站 | 国产一区二区三区四区区 | 妖精视频一区二区三区 | 午夜影院| 久久国产高清视频 | 大久 | 日韩视频一区二区 | 欧美激情国产日韩精品一区18 | 国产91久久久久 | 亚洲少妇综合网 | 国产精品永久免费观看 | 久操福利 | 午夜伦理影院 | 日韩黄| 视频二区在线观看 | 午夜一区二区三区视频 | 亚洲成人一二区 | 成人免费看 | 人人干免费 | 国产午夜精品一区二区三区四区 | 日韩aⅴ在线观看 | 成人欧美一区二区三区黑人孕妇 | 久久久久久久一区 | 亚洲视频一区 | 爱爱小视频| 亚洲免费在线观看 | 在线视频 亚洲 | 日本在线视频中文字幕 |