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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate 一级缓存,二级缓存,查询缓存

發布時間:2024/4/17 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate 一级缓存,二级缓存,查询缓存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概念:

1.什么是緩存呢?

?? 緩存:是計算機領域的概念,它介于應用程序和永久性數據存儲源之間。

?? 緩存:一般人的理解是在內存中的一塊空間,可以將二級緩存配置到硬盤。用白話來說,就是一個存儲數據的容器。我們關注的是,哪些數據需要被放入二級緩存。

?? 作用:降低應用程序直接讀寫數據庫的頻率,從而提高程序的運行性能。緩存中的數據是數據存儲源中數據的拷貝。緩存的物理介質通常是內存。

2.緩存在軟件系統中的位置

?

3.hibernate的緩存一般分為幾種?

? 分為三種:一級緩存,二級緩存和查詢緩存

4.一級緩存

??? 01.session內的緩存即一級緩存,內置且不能被卸載,一個事務內有效。在這個空間存放了相互關聯的Java對象,這種位于session緩存內的對象也別稱為持久化對象,session負責根據持久化對象的狀態變化來同步更新數據庫。

??? 02.session為應用程序提供了管理緩存的方法:evict(Object o)和clear()

??? 03.一級緩存結論

?????? 一級緩存的生命周期和session的生命周期一致,當前session一旦關閉,一級緩存就消失了,因此一級緩存也叫session級的緩存或事務級緩存,一級緩存只存實體對象,它不會緩存一般的對象屬性(查詢緩存可以),即當獲得對象后,就將該對象緩存起來,如果在同一session中再去獲取這個對象時,它會先判斷在緩存中有沒有該對象的id,如果有則直接從緩存中獲取此對象,反之才去數據庫中取,取的同時再將此對象作為一級緩存處理。

??? 04.以下方法支持一級緩存

??????? * get()????

??????? * load()????

??????? * iterate(查詢實體對象)

???????? 其中 Query 和Criteria的list() 只會緩存,但不會使用緩存(除非結合查詢緩存)。

?

5.二級緩存

?? 01.二級緩存是進程(N個事務)或集群范圍內的緩存,可以被所有的Session共享,在多個事務之間共享。

??? 02.二級緩存是可配置的插件

?? 03.二級緩存的散裝數據

?

注意:如果緩存中的數據采用對象的散裝數據形式,那么當不用的事務到緩存中查詢OID為1的Customer對象時,獲得的是Customer對象的散裝數據,每個事務都必須分別根據散裝數據重新構造出Customer實例,也就是說,每個事務都會獲得不同的Customer對象。

?? 04.二級緩存機制

?

?? 05.二級緩存分為:類級別緩存,集合級別緩存,更新時間戳和查詢緩存。

?? 06.二級緩存的散裝原理圖

?

?

?

??? 07.類級別的二級緩存只適用于get和load獲取數據,對query接口的list()可以將數據放置到類級別的緩存中,但不能使用query接口的list()從緩存中獲取數據。

?? 08.注意點:修改一級緩存的數據,會自動同步到二級緩存。

?? 09.二級緩存結論

?????? 二級緩存也稱進程級的緩存或SessionFactory級的緩存,二級緩存可以被所有session共享,二級緩存的生命周期和SessionFactory的生命周期一致。hibernate為實現二級緩存,只提供二級緩存的接口供第三方實現。二級緩存也是緩存實體對象,原理和方法都與一級緩存差不多,只是生命周期有所差異。

6.查詢緩存

???? 01.查詢是數據庫技術中最常用的操作,Hibernate為查詢提供了緩存,用來提高查詢速度,優化查詢性能相同HQL語句檢索結果的緩存!

???? 02.查詢緩存依賴于二級緩存,查詢緩存是針對普通屬性結果集的緩存,對實體對象的結果集只緩存id(其id不是對象的真正id,可以看成是HQL或者SQL語句,它與查詢的條件相關即where后的條件相關,不同的查詢條件,其緩存的id也不一樣)。查詢緩存的生命周期,當前關聯的表發生修改或是查詢條件改變時,那么查詢緩存生命周期結束,它不受一級緩存和二級緩存生命周期的影響,要想使用查詢緩存需要手動配置。

7.結論

?????不要想當然的以為緩存可以提高性能,僅僅在你能夠駕馭它并且條件合適的情況下才是這樣的。hibernate的二級緩存限制還是比較多的。在不了解原理的情況下亂用,可能會有1+N的問題。不當的使用還可能導致讀出臟數據。?如果受不了hibernate的諸多限制,那么還是自己在應用程序的層面上做緩存吧。?

???? 在越高的層面上做緩存,效果就會越好。就好像盡管磁盤有緩存,數據庫還是要實現自己的緩存,盡管數據庫有緩存,咱們的應用程序還是要做緩存。因為底層的緩存它并不知道高層要用這些數據干什么,只能做的比較通用,而高層可以有針對性的實現緩存,所以在更高的級別上做緩存,效果也要好些吧。

??? ??緩存是位于應用程序與物理數據源之間,用于臨時存放復制數據的內存區域,目的是為了減少應用程序對物理數據源訪問的次數,從而提高應用程序的運行性能.? ??? Hibernate在查詢數據時,首先到緩存中去查找,如果找到就直接使用,找不到的時候就會從物理數據源中檢索,所以,把頻繁使用的數據加載到緩存區后,就可以大大減少應用程序對物理數據源的訪問,使得程序的運行性能明顯的提升.?

轉載于:https://www.cnblogs.com/yangsongxiao/p/6380521.html

總結

以上是生活随笔為你收集整理的Hibernate 一级缓存,二级缓存,查询缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。