Hibernate之二級緩存實例用法

本次測試使用MyEclipse2017,利用內置Hibernate3.3框架進行二級緩存機制的測試。

本次測試建立Person實體類,SessionFactory.java,hibernate.cfg.xml,Person.bhm.xml均由MyEclipse自動生成。

配置好數據庫中的table Person進行測試。


測試代碼:

Session session=HibernateSessionFactory.getSession();

             Person person =(Person)session.get(Person.class,4);

             System.out.println(person.getPname());

             Person person1=(Person)session.get(Person.class, 4);

             System.out.println(person1.getPname());

             session.close();

結果:

 

此處出現一條查詢語句,因爲第一次的查詢和第二次相同,第二次直接使用緩存中的數據。

Session session=HibernateSessionFactory.getSession();

             Person person =(Person)session.get(Person.class,4);

             System.out.println(person.getPname());

             Person person1=(Person)session.get(Person.class, 4);

             System.out.println(person1.getPname());

             session.close();

             

             Session session2=HibernateSessionFactory.getSession();

             person =(Person)session2.get(Person.class,4);

             System.out.println(person.getPname());

             session2.close();

結果:

此處新建session對象,使用同樣的實體對象,出現了第二條語句,因爲第一個session對象已被關閉,第二個對象新建產生,緩存已被清除,只能從數據庫中重新查詢獲得值。

 

Hibernate查詢策略:

條件查詢的時候,先通過select * from table_nam查詢數據庫,一次過的所用數據對象,將獲得的數據放入二級緩存中。

先到一級緩存去查數據,查不到,如果配置了二級緩存查詢,就去二級緩存,再找不到就去數據庫中查詢,將結果通過id存入緩存中。

在刪除更新增加數據時,同時更新緩存。

緩存策略主要針對ID查詢的緩存策略,對屬性查詢則毫無作用,爲此Hibernate針對條件查詢訂單Query Cache。

當服務器驅動時將公共部分數據全部放在二級緩存中。

一級:session級別的緩存,和session的生命週期共同存在,在這個週期中無論查詢相同數據多少次只能進行一次查詢語句。

二級:sessionFactory級別緩存,大數據公共全部使用sessionFacotry,爲全局類型緩存,sessionFactory的生存方式相同。

SessionFactory提供evict方法

通過session設置緩存的模式

NORMAL 從二級緩存讀寫數據

GET 從二級緩存讀取數據,僅在數據更新時對二級緩存寫數據

PUT  只向二級緩存寫數據,但不從二級讀數據

適合放在緩存的數據:

很少被修改的數據,不是很重要的書庫,允許出現偶爾併發的數據你不會被併發訪問的數據,參考數據,指的是供應用參考的實例引用,實例極少或者從來不修改。

不適合存放到緩存的數據:經常被修改的數據,財務數據,不允許出現併發,與其他應用共享的數據。

緩存配置文件:

 

ehcache.xml:將文件放在src下

hibernate.properties:

進入cfg.xml中進行配置:

<property name="hibernate.cache.use_second_level_cache">true</property>//開啓二級緩存

 <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>//修改緩存模式

<class-cache usage="read-only" class="cache.Person"/>//修改只讀

在配置之後運行報錯:

Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

需要導入日誌包commons-logging-1.1.3.jar。

由此開啓二級緩存之後修改session對象也不會增加查詢語句,只要在查詢第一次數據後就會將數據存入二級緩存,一遍下次繼續使用數據:

 

開啓緩存也可在Person.hbm.xml中完成配置:

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