一、hibernate的快取機制
快取cache是位於應用層與物理資料來源之間臨時存放複製資料的記憶體區域,其目的是為了減少應用程式對物理資料來源訪問的次數,從而提高應用程式的執行效能。
hibernate在查詢資料時,首先會到快取中查詢,如果找到就直接使用,只有在快取中找不到時才會從物理資料來源中檢索。因此,當把頻繁使用的資料載入到快取區後,就可以大大減少應用程式對物理資料來源的訪問,使應用程式效能提公升。
二、快取分類
在前面我們使用的session快取用於臨時儲存session例項中的持久化物件,他是hibernate不可分割的基本組成部分,因此被稱為一級快取。一級快取可以使用用session例項進行操做。
sessionfactory的外接快取中存放的是資料庫資料的副本,起作用與一級快取類似,用於彌補一些快取的不足,因此被稱為二級快取。二級快取可以使用sessionfactory例項進行操作。在預設情況下,sessionfactory不會啟用二級快取,當需要的時候,可以將二級快取以快取外掛程式的形式進行配置。
另外,二級快取除了以記憶體作為儲存介質外,還可以選用硬碟等外部儲存裝置。
三、二級快取使用位置
不適合使用位置:
經常被修改的資料
出現併發訪問的資料,如財務資料
與其他應用共享的資料,因為hibernate並不能感知資料被其他應用的修改,也就是無法保證二級快取中的資料與資料庫中資料的一致性。
適合的使用位置
資料更新頻率低,也就是那些很少被修改的資料。
允許偶爾出現併發問題的非重要資料。
不會被併發訪問的資料
常量資料
不會被第三方修改的資料
四、使用配置方法:
1、在gradle中引入新包:compile group: 'org.hibernate', name: 'hibernate-ehcache', version: '5.2.12.final'
2、在resources中新建乙個ehcache.xml配置檔案如下:
<?xml version="1.0" encoding="utf-8"
?>
<
ehcache
>
<
defaultcache
maxelementsinmemory
="1000"
eternal
="false"
timetoidleseconds
="3600"
timetoliveseconds
="3600"
overflowtodisk
="false"
>
defaultcache
>
<
cache
name
="org.hibernate.cache.internal.standardquerycache"
maxelementsinmemory
="5"
eternal
="false"
timetoliveseconds
="120"
>
cache
>
<
cache
name
="org.hibernate.cache.spi.updatetimestampscache"
maxelementsinmemory
="5000"
eternal
="true"
>
cache
>
ehcache
>
上面是預設cache,如果預設cache不存在就走查詢cache和修改cache。
3、在hibernate.cfg.xml配置檔案中載入二級快取
<
property
name
="hibernate.cache.region.factory_class"
>org.hibernate.cache.ehcache.ehcacheregionfactory
property
>
<
property
name
="hibernate.cache.use_query_cache"
>true
property
>
<
property
name
="hibernate.cache.provider_configuration_file_resource_path"
>classpath:ehcache.xml
property
>
<
property
name
="hibernate.cache.use_second_level_cache"
>true
property
>
4、在dao層的查詢中使用二級快取
publicvoid
query2()
catch
(exception e)
session.close();
}
hibernate二級快取
cacheconcurrencystrategy.none cacheconcurrencystrategy.read only 唯讀模式,在此模式下,如果對資料進行更新操作,會有異常 cacheconcurrencystrategy.read write 讀寫模式在更新快取的時候會把快取裡面的資料...
hibernate 二級快取
session快取 一級快取 sql查詢結果快取,由hibernate管理 sessionfactory內建快取,內建快取是hibernate自帶的,用於存放預定義的sql以及hbm.xml描述的元資料,不可解除安裝 sessionfactory外接快取 二級快取 由外部外掛程式提供,外接快取的資料...
Hibernate二級快取
hibernate的session在事務級別進行持久化資料的快取操作。當然,也有可能分別為每個類 或集合 配置集群 或jvm級別 sessionfactory級別 的快取。你甚至可以為之插入乙個集群的快取。注意,快取永遠不知道其他應用程式對持久化倉庫 資料庫 可能進行的修改 即使可以將快取資料設定為...