Hibernate的二級快取

2022-05-11 17:38:04 字數 2611 閱讀 9199

一、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層的查詢中使用二級快取

public

void

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級別 的快取。你甚至可以為之插入乙個集群的快取。注意,快取永遠不知道其他應用程式對持久化倉庫 資料庫 可能進行的修改 即使可以將快取資料設定為...