日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate 笔记 缓存

發(fā)布時間:2024/4/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate 笔记 缓存 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1 Hibernate 緩存

緩存是數(shù)據(jù)庫數(shù)據(jù)在內(nèi)存中的臨時容器,它包含了庫表數(shù)據(jù)在內(nèi)存中的臨時拷貝,位于數(shù)據(jù)庫和訪問層之間。ORM在進(jìn)行數(shù)據(jù)讀取時,會根據(jù)緩存管理策略,首先在緩沖中查詢,如果發(fā)現(xiàn),則直接使用,避免數(shù)據(jù)庫調(diào)用的開銷。

?  數(shù)據(jù)緩存的策略:   ?事務(wù)級緩存:當(dāng)前事務(wù)范圍內(nèi)的數(shù)據(jù)緩存   ?應(yīng)用級緩存:某個應(yīng)用中的數(shù)據(jù)緩存   ?分布式緩存:多個應(yīng)用,多個JVM之間共享緩存。分布式緩存由多個應(yīng)用級緩存實(shí)例組成集群,通過某種遠(yuǎn)程機(jī)制實(shí)現(xiàn)各個緩存實(shí)例之間的數(shù)據(jù)同步,任何一個實(shí)例的           ?   ?????????  ?? 數(shù)據(jù)修改后,將導(dǎo)致整個集群間的數(shù)據(jù)狀態(tài)同步。 2 一級緩存
  • 一級緩存的數(shù)據(jù)結(jié)構(gòu)是Map,用于存儲查詢實(shí)體。Map的key存放實(shí)體的Id,Map的value存放實(shí)體本身。所以一級緩存無法存儲查詢的屬性。
  • 一級緩存的生命周期與Session有關(guān),Session產(chǎn)生一級緩存創(chuàng)建,Session關(guān)閉一級緩存銷毀
  • Get,Load,Iterator方法讀寫一級緩存,List方法只寫不讀一級緩存

???????????????? ?load(get)查詢數(shù)據(jù)步驟:

??????????????????????????????????????????????????????? 1查詢一級緩存

?

??????????????????????        ?? ?????? 2 一級緩存沒有數(shù)據(jù),發(fā)送SQL,有數(shù)據(jù)返回?cái)?shù)據(jù)

?

???????????????????????        ?? ????? 3 寫入一級緩存

?

???????????????????        ????????????

?

?

?????????? ????? Iterator查詢數(shù)據(jù)步驟:

?????????????????????????? ? 1? 發(fā)送查詢id的sql

?????????????????????????????2??根據(jù)id查詢緩存

???????????????????????????? 3? 如果緩存中有數(shù)據(jù),直接取出,如果沒有去數(shù)據(jù)庫中查詢,并寫入一級緩存

  • 一級緩存不能禁用,但可以通過Session的clear方法和evict方法清理一級緩存,從而達(dá)到禁止寫緩存的效果
  • Session的save方法會寫緩存,在批量插入數(shù)據(jù)時要注意對一級緩存做定時清理。Hibernate的批量處理效率不高,建議使用Session.connection()或得Jdbc連接后使用Jdbc的相關(guān)API做批處理操作
3 二級緩存 二級緩存屬于應(yīng)用級緩存,集群性緩存?   定義步驟:?
1、打開緩存,在hibernate.cfg.xm中加入:?
<property name="hibernate.cache.use_second_level_cache">true</property>?

2、指定緩存策略提供商,在hibernate.cfg.xm中加入:?
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>?

3、拷貝echcahe.xml到src下,可以針對不同的策略配置緩存?

4、指定那些類使用緩存(兩種方式)?
???<class-cache class="com.gzl.po.Dept usage="read-only"/>? ? * 在hibernate.cfg.xml???
? * 在映射文件中?
  • 二級緩存也稱進(jìn)程級的緩存或SessionFactory級的緩存,二級緩存可以被所有的session共享。
  • 二級緩存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二級緩存。
  • Hibernate 默認(rèn)情況下是打開的,提供一個Hashtable存儲二級緩存,但只適用于研發(fā),開發(fā)中為第三方緩存組件提供了接入接口,我們可以根據(jù)不同情況選擇不同的實(shí)現(xiàn)。
  • 二級緩存也只能緩存實(shí)體對象,不緩存屬性。
  • Get,Load,Iterator方法讀寫二級緩存,List方法只寫不讀二級緩存

???????????????? ?load(get)查詢數(shù)據(jù)步驟:

??????????????????????????????????????????????????????? 1查詢一級緩存 如果沒有數(shù)據(jù),查詢二級緩存

??????????????????????        ?? ?????? 2 二級緩存也沒有數(shù)據(jù) 去數(shù)據(jù)庫查找,如果有會拷貝到一級緩存

???????????????????????        ?? ????? 3 寫入一級緩存

???????????????????        ?? ??????????4 拷貝到二級緩存

  • 設(shè)置<property name=“hibernate.cache.use_second_level_cache”>fasle</property>可以禁用二級緩存。
  • 在一次Session交互中,可以設(shè)置Session的CacheMode為Put來禁用讀操作,設(shè)置CacheMode為Get來禁用寫操作
  • 也可以通過SessionFacotry的evict方法清理二級緩存來達(dá)到禁止寫二級緩存的效果
4 查詢緩存
  • 查詢緩存是針對普通屬性結(jié)果集的緩存,對實(shí)體對象的結(jié)果集只緩存id
  • 查詢緩存的生命周期為當(dāng)前關(guān)聯(lián)的表發(fā)生修改,那么查詢緩存生命周期結(jié)束
  • 查詢緩存的配置和使用:

        * 在hibernate.cfg.xml文件中啟用查詢緩存,如:

        <property name="hibernate.cache.use_query_cache">true</property>

   ???  * 在程序中必須手動啟用查詢緩存,如:

        query.setCacheable(true);

  • List方法讀寫查詢緩存,Iterator不讀查詢緩存
  • 二級緩存和查詢緩存搭配使用效果最佳

轉(zhuǎn)載于:https://www.cnblogs.com/zilong882008/archive/2011/11/07/2239397.html

總結(jié)

以上是生活随笔為你收集整理的Hibernate 笔记 缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。