hibernate學習 快取機制

2022-09-15 17:57:15 字數 2817 閱讀 5492

在之前的hibernate學習中,我們無論是curd,對單錶查詢還是檢索優化,我們好像都離不開session,session我們之間也簡單的說過,它是乙個快取,這一篇文章就就hibernate的快取進行一些介紹,我們將從以下幾點進行:

一丶快取的分類: 

hibernate中快取分為一級快取和二級快取,像我們之前經常用到的session是一級快取,二級快取hibernate並沒有內建,但是它提供了支援和規範,我們可以通過一些第三方外掛程式來使用這些二級快取,使用之前當然要進行配置。

二丶一級快取:

①一級快取就是session快取,其實就是記憶體中的一塊空間,在這個記憶體空間中存放了相互關聯的j**a物件。

②session快取是事務級快取,隨著事務 的開啟而開啟,隨著事務的關閉而關閉,session快取由hibernate進行管理。

③當我們使用session的load() get() s**e()等方法的時候hibernate會對相關的實體物件進行快取。

④session的重新整理與同步,session的重新整理是指session快取中的資料更新,session同步是指將session中的資料同步到資料庫中,執行同步的時間只有乙個,即事務的提交,但是session的重新整理可以有幾個,主要有一下三個重新整理點:

(1)執行query查詢

(2)執行session.flush()

(3)執行事務的提交

三丶快照

什麼是快照?

快照就是副本,hibernate中的快照就是資料庫的副本,快照中的資料是由hibernate自己維護。快照中的資料由hibernate自己維護,快照中的資料保持和資料庫是一致,**不能對它進行修改,其作用主要是為了在處理資料的更新時,將session中的資料和快照進行比對,(即和資料庫中的資料進行比對)以此來判斷是否執行update語句。

當**通過session的查詢方法呼叫,將資料載入到記憶體中後,hibernate會將此資料存放於session快取中,當然快照中也有該資料的副本。預設情況下,在事務提交的時候會比對session和快照中的資料,如果不同,則資料發生了更新,會將session中快取的資料用update進行更新,如果相同,說明資料未發生改變,無需做出同步。

四丶二級快取:

二級快取是sessionfactory級的快取,其生命週期和sessionfactory一致,sessionfactory快取可以依據功能和目的的不同劃分為內建快取和外接快取。

sessionfactory的內建快取中存放了對映元資料和預定義sql語句。sessionfactory的內建快取是唯讀的,應用程式不能修改快取中的對映元資料和預定義語句,因此sessionfactory不需要進行內建快取與對映檔案的同步。

sessionfactory的外接快取是乙個可配置的外掛程式。在預設情況下,sessionfactory不會啟用這個外掛程式。外接快取的資料是資料庫的副本,外接快取的介質可以是記憶體或者硬碟。sessionfactory的外接快取也被稱為hibernate的二級快取。

hibernate本身只提供了二級快取的規範,但是並為實現,故需要第三方快取產品的支援。

常用的二級快取第三方外掛程式有:ehcache,memcached,oscache,swrmcache,jbosscache等。這裡我們就不一一介紹。

二級快取的內容分為:

本篇文章就ehcache來進行配置和說明。

五丶ehcache的配置: 

①在使用這個二級快取之前我們需要導包(黃色塗鴉部分是我們要的包): 

②導包過後我們需要在hibernate的主配置檔案中開啟二級快取:

在這個路徑中properties檔案中可以找到我們需要的屬性。

③開啟過二級快取後需要需要為這個二級快取開闢一片快取空間,同樣我們需要在主配置檔案中配置開闢一片快取空間:

④最後我們還需要乙個二級快取配置檔案 

這個配置檔案在這個jar包最底部,名字叫:ehcache-failsafe.xml,我們將它改為ehcache.xml,併發到專案根目錄下:

這樣我們的二級快取的環境就配置好了。

六丶快取內容的配置: 

上面我們提及到了快取的內容,接下來我們就來看看二級快取的內容是如何配置的: 

首先需要在主配置檔案中指定類快取和集合快取: 

①類快取的配置 

我們需要在對映檔案中指定的類中新增如下圖的配置:

②集合快取的配置 

在指定集合內進行配置

③查詢快取的配置 

在主配置檔案中配置query快取 

七丶總結

hibernate提供的兩級快取機制,在資訊量訪問較大的情況下,能夠通過避免相同的查詢,減少訪問資料庫的次數,來緩解伺服器的壓力。這樣的機制大大提高了系統的整體訪問效率,同時也降低了對伺服器硬體的要求,要學會根據業務的需要來使用hibernate的快取機制,不要盲目使用。

hibernate快取機制

hibernate的快取機制 首先引入快取的目的 hibernate 在查詢資料時,首先到快取中去查詢,如果找到就直接使用,找不到的時候就會從物理資料來源中檢索,所以,把頻繁使用的資料載入到快取區後,就可以大大減少應用程式對物理資料來源的訪問,使得程式的執行效能明顯的提公升.什麼是快取 快取是位於應...

Hibernate快取機制

hibernate快取分類 session快取,一級快取.sessionfactory的快取分為內建快取和外接快取.內建快取中存放的是sessionfactory物件的一些集合屬性包含的資料 對映元素據及預定義sql語句等 對於應用程式來說,它是唯讀的.外接快取中存放的是資料庫資料的副本,其作用和一...

Hibernate快取機制

快取是位於應用程式與物理資料來源之間,用於臨時存放複製資料的記憶體區域,目的是為了減少應用程式對物理資料來源訪問的次數,從而提高應用程式的執行效能.hibernate在查詢資料時,首先到快取中去查詢,如果找到就直接使用,找不到的時候就會從物理資料來源中檢索,所以,把頻繁使用的資料載入到快取區後,就可...