hibrnate內部緩存分析

緩存的作用主要用來提高性能,可以簡單的理解成一個Map;使用緩存涉及到三個操作:把數據放入緩存、從緩存中獲取數據、刪除緩存中的無效數據。

一、hibrnate內部緩存分析:

1、一級緩存:Session級別的緩存

       特點:生命週期短、作用範圍小。隨着session的結束而結束!

       缺陷:沒有任何的保護,不能存過多數據,否則緩存會溢出!共享範圍太小。

什麼時候將數據放入緩存?

答:save,update,saveOrUpdate,load,get,list,iterate,lock這些方法都會將對象放在一級緩存中

什麼時候從緩存中提取數據?

答:查詢的時候:get()、load()先去緩存中找,如果有直接返回;如果沒有則從數據庫中找。Criteria、query接口實現的查詢,不從緩存中提取數據

        注:一級緩存不能控制緩存的數量,所以要注意大批量操作數據時可能造成內存溢出;可以用evict(清除一級緩存中的一個對象),clear(清除一級緩存中的所有對象)方法清除緩存中的內容。

2、二級緩存:sessionFactory級別緩存

·實現爲可插拔,通過修改cache.provider_class參數來改變;

hibernate內置了對EhCache,OSCache,TreeCache,SwarmCache的支持,可以通過實現CacheProvider和Cache接口來加入Hibernate不支持的緩存實現。

·在hibernate.cfg.xml中加入:

              <class-cache class="className" usage="read-only"/>

              或在映射文件的class元素加入子元素:

              <cache usage="read-write"/>

              其中usage:read-only,read-write,nonstrict-read-write,transactional。

       在配置文件中配置二級緩存,主要高速hibrnae第三方緩存的提供者是誰。

(1)       cache.use_second_level_cache:true決定要不要打開二級緩存打開,這個屬性的默認值就是true

(2)cache.provider_class:cache的提供者是誰

<property name="cache.provider_class">

org.hibernate.cache.OSCacheProvider

</property>

(3)需要將oscache相關的jar包構建到項目中

(4)需要將oscache.properties拷貝src目錄下

(5)方法一:在配置文件中<class-cache class=”com.hbsi.domain.User” usage=””>:告訴hibrnate哪些類是需要放入緩存的:

       Usage:    reade-only  效率高,但是有一個限制數據庫不能被修改、Read-writer、nonstruct-read-writer、transactional

       方法二:在映射文件中<cache usage="read-write"/>告訴hibernate

              命中:

              錯過:

              <property name=”gengerate_statisyics”>true</property>

對調是有很大的幫助,產生統計信息

在statistics st=session.getStatistics();//得到緩存統計信息

Statistics[

Start time=1324006095531,

sessions opened=0,

sessions closed=0,

transactions=0,

successful transactions=0,

optimistic lock failures=0,

flushes=0,

connections obtained=0,

statements prepared=0,

statements closed=0,

second level cache puts=0,

second level cache hits=0,

second level cache misses=0,

entities loaded=0,

entities updated=0,

entities inserted=0,

entities deleted=0,

entities fetched=0,

collections loaded=0,

collections updated=0,

collections removed=0,

collections recreated=0,

collections fetched=0,

queries executed to database=0,

query cache puts=0,

query cache hits=0,

query cache misses=0,

max query time=0

]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章