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

Hibernate緩存概述

開發(fā) 后端
本文簡(jiǎn)單介紹Hibernate緩存。Hibernate緩存是介于物理數(shù)據(jù)源與應(yīng)用程序之間,是數(shù)據(jù)庫(kù)數(shù)據(jù)在內(nèi)存中的存放臨時(shí)copy的容器,其作用是為了減少應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問的次數(shù),從而提高了應(yīng)用的運(yùn)行性能。

1、Hibernate緩存概述

緩存是介于物理數(shù)據(jù)源與應(yīng)用程序之間,是數(shù)據(jù)庫(kù)數(shù)據(jù)在內(nèi)存中的存放臨時(shí)copy的容器,其作用是為了減少應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問的次數(shù),從而提高了應(yīng)用的運(yùn)行性能。

Hibernate在進(jìn)行讀取數(shù)據(jù)的時(shí)候,根據(jù)緩存機(jī)制在相應(yīng)的緩存中查詢,如果在緩存中找到了需要的數(shù)據(jù)(我們把這稱做“緩存命中"),則就直接把命中的數(shù)據(jù)作為結(jié)果加以利用,避免了建立數(shù)據(jù)庫(kù)查詢的性能損耗。

2:Hibernate緩存分類

一級(jí)緩存(session):內(nèi)部緩存

事務(wù)范圍:緩存只能被當(dāng)前事務(wù)訪問。緩存的生命周期依賴于事務(wù)的生命周期,當(dāng)事務(wù)結(jié)束時(shí),緩存也就結(jié)束生命周期。

二級(jí)緩存(sessionFactory):緩存被應(yīng)用范圍內(nèi)的所有事務(wù)共享。

這些事務(wù)有可能是并發(fā)訪問緩存,因此必須對(duì)緩存進(jìn)行更新。

緩存的生命周期依賴于應(yīng)用的生命周期,應(yīng)用結(jié)束時(shí),緩存也就結(jié)束了生命周期,二級(jí)緩存存在于應(yīng)用范圍。

集群范圍:在集群環(huán)境中,緩存被一個(gè)機(jī)器或者多個(gè)機(jī)器的進(jìn)程共享。

緩存中的數(shù)據(jù)被復(fù)制到集群環(huán)境中的每個(gè)進(jìn)程節(jié)點(diǎn),進(jìn)程間通過遠(yuǎn)程通信來保證緩存中的數(shù)據(jù)的一致性,緩存中的數(shù)據(jù)通常采用對(duì)象的松散數(shù)據(jù)形式,二級(jí)緩存也存在與應(yīng)用范圍。

注意:對(duì)大多數(shù)應(yīng)用來說,應(yīng)該慎重地考慮是否需要使用集群范圍的緩存,再加上集群范圍還有數(shù)據(jù)同步的問題,所以應(yīng)當(dāng)慎用。

多種范圍的緩存處理過程

持久化層可以提供多種范圍的緩存。如果在事務(wù)范圍的緩存中沒有查到相應(yīng)的數(shù)據(jù),

還可以到應(yīng)用范圍或集群范圍的緩存內(nèi)查詢,如果還是沒有查到,那么只有到數(shù)據(jù)庫(kù)中查詢了。

緩存應(yīng)用的范圍:

修改少,數(shù)量在可以接受的范圍內(nèi)

使用二級(jí)緩存的原則:

數(shù)據(jù)不會(huì)被第三方修改

同一數(shù)據(jù)系統(tǒng)經(jīng)常引用

數(shù)據(jù)大小在可接受范圍之內(nèi)

關(guān)鍵數(shù)據(jù)或不會(huì)被并發(fā)更新的數(shù)據(jù)

hibernate引入第三方的緩存組件EHCACHE,下面是具體的實(shí)現(xiàn)步驟:

修改hibernate.cfg.xml配置引入ehCache緩存

  1. < hibernate-configuration> 
  2.  
  3. < session-factory> 
  4.  
  5. < property name="hibernate.cache.provider_class"> 
  6.  
  7. net.sf.ehcache.hibernate.EhCacheProvider  
  8.  
  9. < /property> 
  10.  
  11. < !--query也支持緩存--> 
  12.  
  13. < property name="hibernate.cache.use_query_cache">true< /property> 
  14.  
  15. < /session-factory> 
  16.  
  17. < /hibernate-configuration> 

在src根目錄下加入ehcache.xml文件,具體內(nèi)容如下:

  1. < ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd"> 
  2.  
  3. < defaultCache 
  4.  
  5. maxElementsInMemory="10000" 
  6.  
  7. eternal="false" 
  8.  
  9. timeToIdleSeconds="120" 
  10.  
  11. timeToLiveSeconds="120" 
  12.  
  13. overflowToDisk="true" 
  14.  
  15. /> 
  16.  
  17. < /ehcache> 

在映射文件中指定緩存同步策略

  1. < class name="com.tenly.bean.Student"> 
  2.  
  3. < cache usage="read-write"> 
  4.  
  5. < set name="classroom"> 
  6.  
  7. < cache usage="read-only"> 
  8.  
  9. < /set> 
  10.  
  11. < /class> 

usage屬性說明:

read-only:只讀。對(duì)于不會(huì)發(fā)生改變的數(shù)據(jù),可使用只讀型緩存。

nonstrict-read-write:不嚴(yán)格可讀寫緩存。如果應(yīng)用程序?qū)Σl(fā)訪問下的數(shù)據(jù)同步要求不是很嚴(yán)格的話,

而且數(shù)據(jù)更新操作頻率較低。采用本項(xiàng),可獲得良好的性能。

read-write

對(duì)于經(jīng)常被讀但很少修改的數(shù)據(jù),可以采用這種隔離類型,因?yàn)樗梢苑乐古K讀這類的并發(fā)問題.

transactional(事物型)

在Hibernate中,事務(wù)型緩存必須運(yùn)行在JTA事務(wù)環(huán)境中。

在測(cè)試query時(shí),說明其將用二級(jí)緩存

query.setCacheable(true);

釋放Hibernate緩存:

一級(jí)緩存的釋放

Session.evict(XXX)

將某個(gè)特定的對(duì)象從內(nèi)部緩存中清除,上述的XXX 為對(duì)象的實(shí)例名。使用此方法有兩種適用情形,

需要及時(shí)釋放對(duì)象占用的內(nèi)存維持系統(tǒng)的穩(wěn)定性

是不希望當(dāng)前Session繼續(xù)運(yùn)用此對(duì)象的狀態(tài)變化來同步更新數(shù)據(jù)庫(kù)。

Session.clear()清除所有的一級(jí)緩存

二級(jí)緩存的釋放

SessionFacatoyr.evict(XXX)

將某個(gè)特定的對(duì)象從內(nèi)部緩存中清除,上述的XXX 為對(duì)象的實(shí)例名。使用此方法有兩種適用情形,

需要及時(shí)釋放對(duì)象占用的內(nèi)存維持系統(tǒng)的穩(wěn)定性

是不希望當(dāng)前Session繼續(xù)運(yùn)用此對(duì)象的狀態(tài)變化來同步更新數(shù)據(jù)庫(kù)。

SessionFactory.clear()清除所有的二級(jí)緩存

查詢緩存:

二級(jí)緩存策略的一般過程:

Hibernate進(jìn)行條件查詢的時(shí)候,總是發(fā)出一條select * from XXX where …(XXX為 表名,

 類似的語(yǔ)句下文統(tǒng)稱Select SQL)這樣的SQL語(yǔ)句查詢數(shù)據(jù)庫(kù),一次獲得所有的符合條件的數(shù)據(jù)對(duì)象。

把獲得的所有數(shù)據(jù)對(duì)象根據(jù)ID放入到第二級(jí)緩存中。

當(dāng)Hibernate根據(jù)ID訪問數(shù)據(jù)對(duì)象的時(shí)候,首先從內(nèi)部緩存中查找,如果在內(nèi)部緩存中查不到就配置二級(jí)緩存,

從二級(jí)緩存中查;如果還查不到,再查詢數(shù)據(jù)庫(kù),把結(jié)果按照ID放入到緩存。

 添加數(shù)據(jù)、刪除、更新操作時(shí),同時(shí)更新二級(jí)緩存。這就是Hibernate做批處理的時(shí)候效率不高的原因,

 原來是要維護(hù)二級(jí)緩存消耗大量時(shí)間的緣故。

條件查詢的處理過程:

   ***次查找age>20的所有學(xué)生信息,然后納入二級(jí)緩存。

   第二次我們的查詢條件變了,查找age>15的所有學(xué)生信息,顯然***次查詢的結(jié)果完全滿足第二次查詢的條件,

   但并不是滿足條件的全部數(shù)據(jù)。這樣的話,我們就要再做一次查詢得到全部數(shù)據(jù)才行。

   如果我們執(zhí)行的是相同的條件語(yǔ)句,Hibernate引入Query Cache的。

 查詢緩存策略的一般過程:

完全相同的Select SQL重復(fù)執(zhí)行。

重復(fù)執(zhí)行期間,Query Key對(duì)應(yīng)的數(shù)據(jù)表不能有數(shù)據(jù)變動(dòng)(比如添、刪、改操作)

啟用Query Cache,我們需要在hibernate.cfg.xml中進(jìn)行配置,參考配置如下(只列出核心配置項(xiàng)):

  1. < hibernate-configuration> 
  2.  
  3. < session-factory> 
  4.  
  5. < property name="hibernate.cache.user_query_cache">true< /property> 
  6.  
  7. < /session-factory> 
  8.  
  9. < /hibernate-configuration> 

在查詢執(zhí)行之前,將Query.Cacheable設(shè)置為true,而且每次都應(yīng)該這樣。比如:

Query query=session.createQuery(hql).setInteger(0.15);

query.setCacheable(true);

【編輯推薦】

  1. Hibernate創(chuàng)建命名策略
  2. Hibernate的unsaved-value
  3. Hibernate中g(shù)et和load方法的區(qū)別
  4. Hibernate Session的saveOrUpdate()方法
  5. Hibernate二級(jí)緩存攻略
責(zé)任編輯:book05 來源: 163博客
相關(guān)推薦

2009-09-23 17:03:08

Hibernate S

2009-09-29 16:04:29

Hibernate S

2009-09-22 15:10:22

Hibernate映射

2009-09-28 12:57:54

Hibernate C

2009-09-22 09:13:43

Hibernate D

2009-09-21 17:55:14

Hibernate O

2009-09-23 09:47:23

Hibernate e

2009-09-25 16:27:33

Hibernate S

2009-09-28 15:14:45

Hibernate S

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 10:41:10

對(duì)象標(biāo)識(shí)符Hibernate

2009-09-22 10:50:04

Hibernate c

2009-09-22 11:24:07

Hibernate查詢

2009-06-30 14:08:00

Hibernate緩存

2009-06-17 15:13:30

2009-09-27 14:53:38

Hibernate S

2009-06-18 14:51:12

Hibernate緩存Hibernate
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲天堂中文字幕 | 在线亚洲一区二区 | 99久久久无码国产精品 | av电影一区 | 天天躁日日躁狠狠的躁天龙影院 | 久久久欧洲 | 有码在线 | 国产精品99精品久久免费 | 视频在线一区二区 | 欧美国产视频一区二区 | 午夜av电影 | 成人a视频| 日本精品一区二区 | 九九视频在线观看 | 免费在线观看黄网站 | 91一区二区 | 亚洲最大看片网站 | 精品videossex高潮汇编 | 中文字幕 在线观看 | 在线观看亚洲 | 久久国产欧美日韩精品 | 国产精品免费看 | 久久久性色精品国产免费观看 | 久久涩涩 | 久久久视频在线 | 日韩精品一二三 | 最近免费日本视频在线 | 黄色网络在线观看 | 欧美成年网站 | 国产精品久久久久久婷婷天堂 | 色.com| 日韩视频成人 | 欧美日韩在线一区 | 日韩精品在线网站 | 国产精品视频一区二区三区不卡 | av天天干| 九一在线 | 欧美日韩精品一区二区天天拍 | 亚洲第一区国产精品 | 狠狠艹| 久久亚 |