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

Hibernate緩存分類,范圍及管理配置

開發 后端
本文介紹Hibernate緩存的分類,范圍及管理配置。Hibernate的一級緩存和二級緩存都位于均位于持久層,且均用于存放數據庫數據的副本,最大的區別就是緩存的范圍各不一樣。

緩存是位于應用程序與物理數據源之間,用于臨時存放復制數據的內存區域,目的是為了減少應用程序對物理數據源訪問的次數,從而提高應用程序的運行性能. 

Hibernate在查詢數據時,首先到緩存中去查找,如果找到就直接使用,找不到的時候就會從物理數據源中檢索,所以,把頻繁使用的數據加載到緩存區后,就可以大大減少應用程序對物理數據源的訪問,使得程序的運行性能明顯的提升.

Hibernate緩存分類:

Session緩存,一級緩存.

SessionFactory的緩存分為內置緩存和外置緩存.內置緩存中存放的是SessionFactory對象的一些集合屬性包含的數據(映射元素據及預定義SQL語句等),對于應用程序來說,它是只讀的.外置緩存中存放的是數據庫數據的副本,其作用和一級緩存類似.二級緩存除了以內存作為存儲介質外,還可以選用硬盤等外部存儲設備.

Hibernate的緩存范圍

Hibernate的一級緩存和二級緩存都位于均位于持久層,且均用于存放數據庫數據的副本,最大的區別就是緩存的范圍各不一樣.

緩存的范圍分為3類:

1.事務范圍

   事務范圍的緩存只能被當前事務訪問,每個事務都有各自的緩存,緩存內的數據通常采用相互關聯的對象形式.緩存的生命周期依賴于事務的生命周期,只有當事務結束時,緩存的生命周期才會結束.事務范圍的緩存使用內存作為存儲介質,一級緩存就屬于事務范圍.

2.應用范圍

   應用程序的緩存可以被應用范圍內的所有事務共享訪問.緩存的生命周期依賴于應用的生命周期,只有當應用結束時,緩存的生命周期才會結束.應用范圍的緩存可以使用內存或硬盤作為存儲介質,二級緩存就屬于應用范圍.

3.集群范圍

在集群環境中,緩存被一個機器或多個機器的進程共享,緩存中的數據被復制到集群環境中的每個進程節點,進程間通過遠程通信來保證緩存中的數據的一致,緩存中的數據通常采用對象的松散數據形式.

Hibernate緩存管理

一級緩存的管理:

  evit(Object obj)  將指定的持久化對象從一級緩存中清除,釋放對象所占用的內存資源,指定對象從持久化狀態變為脫管狀態,從而成為游離對象.

  clear()  將一級緩存中的所有持久化對象清除,釋放其占用的內存資源

  contains(Object obj) 判斷指定的對象是否存在于一級緩存中.

  flush() 刷新一級緩存區的內容,使之與數據庫數據保持同步.

二級緩存的管理:

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

  1. sessionFactory.evict(Customer.classnew Integer(1));     
  2. sessionFactory.evict(Customer.classnew Integer(1)); 

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

  1. sessionFactory.evict(Customer.class);     
  2. sessionFactory.evict(Customer.class); 

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

  1. sessionFactory.evictCollection("Customer.orders");     
  2. sessionFactory.evictCollection("Customer.orders"); 

Hibernate的二級緩存的配置

首先,不是所有的數據都適合放在二級緩存中,看一下,什么樣的數據適合放在二級緩存中來?什么樣的數據不適合放在二級緩存中來?

  下面這幾種情況就不適合加載到二級緩存中:

  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

簡單介紹一下EHCache的配置

hibernate.cfg.xml

  1. < hibernate-configuration>     
  2.    < session-factory>     
  3.       < !-- 設置二級緩存插件EHCache的Provider類-->     
  4.       < property name="hibernate.cache.provider_class">     
  5.          org.hibernate.cache.EhCacheProvider      
  6.       < /property>     
  7.       < !-- 啟動"查詢緩存" -->     
  8.       < property name="hibernate.cache.use_query_cache">     
  9.          true      
  10.       < /property>     
  11.    < /session-factory>     
  12.  < /hibernate-configuration>     
  13.  < hibernate-configuration> 
  14.     < session-factory> 
  15.        < !-- 設置二級緩存插件EHCache的Provider類--> 
  16.        < property name="hibernate.cache.provider_class"> 
  17.           org.hibernate.cache.EhCacheProvider  
  18.        < /property> 
  19.        < !-- 啟動"查詢緩存" --> 
  20.        < property name="hibernate.cache.use_query_cache"> 
  21.           true  
  22.        < /property> 
  23.     < /session-factory> 
  24.   < /hibernate-configuration> 

ehcache.xml

  1. < ehcache>     
  2.   < !-- maxElementsInMemory為緩存對象的最大數目, eternal設置是否永遠不過期,timeToIdleSeconds對象處于空閑狀態的最多秒數,timeToLiveSeconds對象處于緩存狀態的最多秒數 -->     
  3.   < diskStore path="java.io.tmpdir"/>     
  4.     < defaultCache maxElementsInMemory="10000" eternal="false"  timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true"/>     
  5. < /ehcache>     
  6. < ehcache> 
  7.   < !-- maxElementsInMemory為緩存對象的最大數目, eternal設置是否永遠不過期,timeToIdleSeconds對象處于空閑狀態的最多秒數,timeToLiveSeconds對象處于緩存狀態的最多秒數 --> 
  8.   < diskStore path="java.io.tmpdir"/> 
  9.     < defaultCache maxElementsInMemory="10000" eternal="false"  timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true"/> 
  10. < /ehcache> 

****.hbm.xml

  1. < ?xml version="1.0" encoding='UTF-8'?>     
  2. < !DOCTYPE hibernate-mapping PUBLIC      
  3.                             "-//Hibernate/Hibernate Mapping DTD 3.0//EN"      
  4.                             "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >     
  5.      
  6. < hibernate-mapping>     
  7.            
  8.    < class>     
  9.        < !-- 設置該持久化類的二級緩存并發訪問策略 read-only read-write nonstrict-read-write transactional-->     
  10.        < cache usage="read-write"/>          
  11.    < /class>     
  12.      
  13. < /hibernate-mapping> 

【編輯推薦】

  1. J2EE實現分頁:Hibernate自定義標簽
  2. Hibernate中使用Criteria查詢實例
  3. Hibernate中使用DetchedCriteria
  4. Hibernate之Criteria進階查詢
  5. Hibernate之Criteria基本查詢
責任編輯:book05 來源: csdn
相關推薦

2009-06-30 14:08:00

Hibernate緩存

2009-09-25 10:25:54

Hibernate緩存

2009-06-29 08:48:41

Hibernate緩存

2009-09-21 14:59:31

Hibernate二級

2009-09-25 09:04:27

Hibernate類型

2009-06-17 15:43:03

Hibernate緩存

2009-09-23 17:03:08

Hibernate S

2012-02-03 11:31:33

HibernateJava

2009-09-25 13:51:13

Hibernate S

2009-09-22 10:50:04

Hibernate c

2009-09-22 11:24:07

Hibernate查詢

2009-06-17 14:41:57

Hibernate查詢

2009-06-10 15:00:58

Hibernate二級配置

2018-07-16 15:17:49

2009-06-18 14:51:12

Hibernate緩存Hibernate

2009-09-27 14:53:38

Hibernate S

2009-06-17 15:13:30

2009-09-23 10:19:08

Hibernate分頁

2012-08-16 11:08:20

2012-02-06 13:52:32

HibernateJava
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区三区亚洲 | 国产a级黄色录像 | 亚洲精品免费观看 | 天天操夜夜操 | 久久国内 | 在线观看第一页 | 成人毛片视频免费 | 天天躁日日躁xxxxaaaa | 黄色网一级片 | 国产精品久久久久久久久久久久午夜片 | 精品视频在线观看 | 永久www成人看片 | 天天搞天天操 | 免费在线观看一区二区 | 亚洲成人免费视频在线观看 | 91亚洲精选 | 一区二区三区四区在线视频 | 国产精品久久久久久久模特 | 亚洲精品中文字幕在线 | 91一区二区三区在线观看 | 欧美久久久久 | 成人免费视频网站在线观看 | 欧美日韩高清在线一区 | 欧美日本韩国一区二区三区 | 毛片一区二区 | 日韩精品人成在线播放 | 日韩在线 | 91爱啪啪| 奇米四色在线观看 | 成人午夜网站 | 亚洲狠狠 | 一级一级毛片免费看 | 懂色tv | 97伦理电影网 | 日本手机在线 | 欧美日韩久久 | 91麻豆精品国产91久久久更新资源速度超快 | 久久久久se | 91成人小视频 | 亚洲香蕉在线视频 | 成人在线精品 |