Hibernate是Java編程語言的開放源代碼,對象/關係映射框架。Hibernate的目標是幫助開發人員擺脫許多繁瑣的手動數據處理任務。Hibernate可以在Java類和數據庫表之間以及Java和SQL中的數據類型之間建立映射。html
任何處理大量數據的非平凡應用程序都必須依靠緩存和其餘技術來提升效率。緩存是一種經過使用緩衝區存儲常常訪問的數據來提升應用程序性能的策略。經過減小數據庫請求的數量並將數據存儲在更靠近CPU的位置,緩存能夠顯着提升應用程序的速度。java
在本文中,咱們將研究如何使用Redisson(一種用於訪問內存中數據結構存儲Redis的Java包裝器)在Hibernate中執行緩存。git
Hibernate使用多級緩存方案。第一級是強制性的,默認狀況下處於啓用狀態,而第二級是可選的。redis
一級緩存(也稱爲L1緩存)與Hibernate的Session對象相關聯,該對象表示Java應用程序和SQL數據庫之間的鏈接。這意味着僅在會話存在的前提下,一級緩存纔可用。每一個第一級緩存只能由與其關聯的Session對象訪問。數據庫
首次從數據庫中查詢實體時,該實體將存儲在與該會話關聯的第一級緩存中。在同一會話期間對此實體的任何後續查詢都將從緩存而不是數據庫中檢索實體。編程
二級緩存(也稱爲L2緩存)默認狀況下處於禁用狀態,但能夠經過修改Hibernate的配置設置來啓用。該緩存與Hibernate的SessionFactory對象相關聯,主要用於存儲應在Session之間持久的數據。在查找第二級緩存以前,應用程序將始終在第一級緩存中搜索給定實體的存在。json
Hibernate還具備第三種類型的緩存:查詢緩存,用於存儲特定數據庫查詢的結果。當您須要使用相同的參數屢次運行相同的查詢時,這頗有用後端
Hibernate中的二級緩存有幾種不一樣的實現,包括Ehcache和OSCache。在本文的其他部分中,咱們將探討Hibernate中用於二級緩存的另外一個選項:Redisson,它容許將Redis用做Hibernate緩存緩存
源碼案例- RedissonCacheRegionFactory網絡
Redisson是Java中的Redis客戶端,其中包含許多Java對象和服務的實現,包括Hibernate緩存。Redisson支持全部四種Hibernate緩存策略:
Redisson提供了各類Hibernate CacheFactories,包括那些支持本地緩存的。若是您打算將Hibernate緩存主要用於讀取操做,或者您不想進行太多的網絡往返,則本地緩存是一個明智的解決方案。
該 RedissonRegionFactory 工具實現了基本的Hibernate緩存,而 RedissonLocalCachedRegionFactory (在Redisson PRO版本中可用)實現了具備本地緩存支持的Hibernate緩存。
redisson-hibernate 可使用Maven或Gradle 將 依賴項輕鬆集成到您的項目中。對於JDK 1.8,Maven設置爲:
<dependency> <groupId>org.redisson</groupId> <!-- for Hibernate v4.x --> <artifactId>redisson-hibernate-4</artifactId> <!-- for Hibernate v5.0.x - v5.1.x --> <artifactId>redisson-hibernate-5</artifactId> <!-- for Hibernate v5.2.x --> <artifactId>redisson-hibernate-52</artifactId> <!-- for Hibernate v5.3.x - v5.4.x --> <artifactId>redisson-hibernate-53</artifactId> <version>3.10.2</version> </dependency>
而且Gradle設置是:
// for Hibernate v4.x compile 'org.redisson:redisson-hibernate-4:3.10.2' // for Hibernate v5.0.x - v5.1.x compile 'org.redisson:redisson-hibernate-5:3.10.2' // for Hibernate v5.2.x compile 'org.redisson:redisson-hibernate-52:3.10.2' // for Hibernate v5.3.x - v5.4.x compile 'org.redisson:redisson-hibernate-53:3.10.2'
要CacheFactory 在Redisson中定義 in,請在Hibernate配置中插入適當的屬性:
<!-- Redisson Region Cache factory --> <property name="hibernate.cache.region.factory_class" value="org.redisson.hibernate.RedissonRegionFactory" /> <!-- or --> <property name="hibernate.cache.region.factory_class" value="org.redisson.hibernate.RedissonLocalCachedRegionFactory" />
您還須要激活Hibernate的二級緩存並指定Redisson配置文件:
<!-- 2nd level cache activation --> <property name="hibernate.cache.use_second_level_cache" value="true" /> <property name="hibernate.cache.use_query_cache" value="true" /> <!-- Redisson YAML config (located in filesystem or classpath) --> <property name="hibernate.cache.redisson.config" value="/redisson.yaml" /> <!-- Redisson JSON config (located in filesystem or classpath) --> <property name="hibernate.cache.redisson.config" value="/redisson.json" />
Redisson容許您爲Hibernate緩存更改許多不一樣的重要參數,包括:
每一個本地緩存條目的最大空閒時間
一旦達到高速緩存的最大大小(LFU,LRU,SOFT,WEAK或NONE),就對本地高速緩存逐出策略
跨全部實例將更改同步到本地緩存的策略(INVALIDATE,UPDATE或NONE)
鏈接失敗(CLEAR,LOAD或NONE)後從新加載丟失的更新的從新鏈接策略
Hibernate 二級緩存 - RedissonCacheRegionFactory
mPaaS(Microservice PaaS) 微服務開發平臺 基於SpringBoot2.x、SpringCloud並採用先後端分離的多租戶系統架構微服務開發平臺
喜歡閱讀Spring、SpringBoot、SpringCloud等底層源碼的能夠關注下mPass 微服務開發平臺,期待您的寶貴意見!