hibernate的二级缓存
緩存(Cache): 計算機領域非常通用的概念。它介于應用程序和永久性數據存儲源(如硬盤上的文件或者數據庫)之間,其作用是降低應用程序直接讀寫永久性數據存儲源的頻率,從而提高應用的運行性能。緩存中的數據是數據存儲源中數據的拷貝。緩存的物理介質通常是內存;
Hibernate中提供了兩個級別的緩存
第一級別的緩存是 Session 級別的緩存,它是屬于事務范圍的緩存。這一級別的緩存由 hibernate 管理的
第二級別的緩存是 SessionFactory 級別的緩存,它是屬于進程范圍的緩存
SessionFactory 的緩存可以分為兩類:
內置緩存: Hibernate 自帶的, 不可卸載. 通常在 Hibernate 的初始化階段, Hibernate 會把映射元數據和預定義的 SQL 語句放到 SessionFactory 的緩存中, 映射元數據是映射文件中數據(.hbm.xml 文件中的數據)的復制. 該內置緩存是只讀的.
外置緩存(二級緩存): 一個可配置的緩存插件. 在默認情況下, SessionFactory 不會啟用這個緩存插件. 外置緩存中的數據是數據庫數據的復制, 外置緩存的物理介質可以是內存或硬盤
適合放入二級緩存中的數據: 很少被修改 不是很重要的數據, 允許出現偶爾的并發問題
不適合放入二級緩存中的數據: 經常被修改 財務數據, 絕對不允許出現并發問題 與其他應用程序共享的數據
1. 使用 Hibernate 二級緩存的步驟:1). 加入二級緩存插件的 jar 包及配置文件:I. 復制 \hibernate-release-4.2.4.Final\lib\optional\ehcache\*.jar 到當前 Hibrenate 應用的類路徑下. II. 復制 hibernate-release-4.2.4.Final\project\etc\ehcachexml 到當前 WEB 應用的類路徑下2). 配置 hibernate.cfg.xml I. 配置啟用 hibernate 的二級緩存 <property name="cache.use_second_level_cache">true</property>II. 配置hibernate二級緩存使用的產品 <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>III. 配置對哪些類使用 hibernate 的二級緩存 <class-cache usage="read-write" class="com.atguigu.hibernate.entities.Employee"/>實際上也可以在 .hbm.xml 文件中配置對哪些類使用二級緩存, 及二級緩存的策略是什么. 2). 集合級別的二級緩存的配置I. 配置對集合使用二級緩存<collection-cache usage="read-write" collection="com.atguigu.hibernate.entities.Department.emps"/>也可以在 .hbm.xml 文件中進行配置<set name="emps" table="GG_EMPLOYEE" inverse="true" lazy="true"><cache usage="read-write"/><key><column name="DEPT_ID" /></key><one-to-many class="com.atguigu.hibernate.entities.Employee" /> </set>II. 注意: 還需要配置集合中的元素對應的持久化類也使用二級緩存! 否則將會多出 n 條 SQL 語句. 3). ehcache 的 配置文件: ehcache.xml <ehcache><!-- 指定一個目錄:當 EHCache 把數據寫到硬盤上時, 將把數據寫到這個目錄下.--> <diskStore path="d:\\tempDirectory"/><!-- 設置緩存的默認數據過期策略 --> <defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="true"/><!-- 設定具體的命名緩存的數據過期策略。每個命名緩存代表一個緩存區域緩存區域(region):一個具有名稱的緩存塊,可以給每一個緩存塊設置不同的緩存策略。如果沒有設置任何的緩存區域,則所有被緩存的對象,都將使用默認的緩存策略。即:<defaultCache.../>Hibernate 在不同的緩存區域保存不同的類/集合。對于類而言,區域的名稱是類名。如:com.atguigu.domain.Customer對于集合而言,區域的名稱是類名加屬性名。如com.atguigu.domain.Customer.orders--><!-- name: 設置緩存的名字,它的取值為類的全限定名或類的集合的名字 maxElementsInMemory: 設置基于內存的緩存中可存放的對象最大數目 eternal: 設置對象是否為永久的, true表示永不過期,此時將忽略timeToIdleSeconds 和 timeToLiveSeconds屬性; 默認值是false timeToIdleSeconds:設置對象空閑最長時間,以秒為單位, 超過這個時間,對象過期。當對象過期時,EHCache會把它從緩存中清除。如果此值為0,表示對象可以無限期地處于空閑狀態。 timeToLiveSeconds:設置對象生存最長時間,超過這個時間,對象過期。如果此值為0,表示對象可以無限期地存在于緩存中. 該屬性值必須大于或等于 timeToIdleSeconds 屬性值 overflowToDisk:設置基于內存的緩存中的對象數目達到上限后,是否把溢出的對象寫到基于硬盤的緩存中 --><cache name="com.atguigu.hibernate.entities.Employee"maxElementsInMemory="1"eternal="false"timeToIdleSeconds="300"timeToLiveSeconds="600"overflowToDisk="true"/><cache name="com.atguigu.hibernate.entities.Department.emps"maxElementsInMemory="1000"eternal="true"timeToIdleSeconds="0"timeToLiveSeconds="0"overflowToDisk="false"/></ehcache>4). 查詢緩存: 默認情況下, 設置的緩存對 HQL 及 QBC 查詢時無效的, 但可以通過以下方式使其是有效的I. 在 hibernate 配置文件中聲明開啟查詢緩存<property name="cache.use_query_cache">true</property>II. 調用 Query 或 Criteria 的 setCacheable(true) 方法III. 查詢緩存依賴于二級緩存?
轉載于:https://www.cnblogs.com/lxnlxn/p/5912597.html
總結
以上是生活随笔為你收集整理的hibernate的二级缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博客园公式编辑相关
- 下一篇: docker 容器日志集中 ELK +