天天看點

淺析hibernate緩存機制

hibernate緩存存儲的是資料對象的拷貝,介于應用程式和實體資料源之間。緩存的媒體一般是記憶體,是以讀寫速度很快。使用緩存可以減少對資料庫的通路,提高性能。位于緩存中的對象稱為持久化對象。

hibernate緩存分為兩種:

一、Session的緩存(hibernate的第一級緩存)

當程式調用Session的save()、update()、get()或者load()、list()、iterate()方法時,如果Session緩存裡還沒有該對象時,就會存入緩存中,如果已經存在就直接從緩存裡拿出來操作。

當緩存清理時,hibernate就會把對象持久化進資料庫。

session什麼時候進行緩存清理:

1.調用commit()方法時

2.查詢對象時

3.session進行flush()重新整理時

二、SessionFactory的緩存(hibernate的第二級緩存)

引用:分為内置緩存和外置緩存。内置緩存是SessionFactory對象的一些集合屬性包含的資料,外置緩存是指Session的一些集合屬性包含的資料

1.内置緩存中存放了映射中繼資料和預定義SQL語句,映射中繼資料是映射檔案中資料的拷貝,而預定義SQL語句是在Hibernate初始化階段根據映射中繼資料推導出來,SessionFactory的内置緩存是隻讀的,應用程式不能修改緩存中的映射中繼資料和預定義SQL語句,是以SessionFactory不需要進行内置緩存與映射檔案的同步。

2.外置緩存是一個可配置的插件。在預設情況下,SessionFactory不會啟用這個插件。外置緩存的資料是資料庫資料的拷貝,外置緩存的媒體可以是記憶體或者硬碟。SessionFactory的外置緩存也被稱為Hibernate的第二級緩存。

可以了解為在Session緩存的高一級緩存,每次調用查詢語句時,會把對象按照ID儲存在二級緩存SessionFactory中

當根據ID擷取對象時,首先從一級緩存session中查找,如果找不到再到二級緩存sessionFactory中查,還是查不到再到資料庫查。

查詢過程是這樣滴:session --> sessionFactory --> DB