Hibernate的緩存分為三種:一級緩存、二級緩存、查詢緩存。下面我就為大家介紹一下。
## 一、概念。
一級緩存:第一級存放于session中稱為一級緩存。Session 級別的緩存,它同session邦定。它的生命周期和session相同。Session消毀,它也同時消毀;管理一級緩存,一級緩存無法取消,用兩個方法管理,clear(),evict()。兩個session 不能共享一級緩存,因它會伴隨session的生命周期的創建和消毀;Session緩存是實體級別的緩存,就是只有在查詢對象級別的時候才使用,如果使用HQL和SQL是查詢屬性級別的,是不使用一級緩存的!
當程序調用save(),update(),saveorupdate()等方法 及調用查詢接口list,filter,iterate時,如session緩存中還不存在相應的對象,Hibernate會把該對象加入到一級緩存中,當Session關閉的時候該Session所管理的一級緩存也會立即被清除Hibernate的一級緩存是Session所內置的,不能被卸載,也不能進行任何配置。
一級緩存的物理介質為內存,由于內存容量有限,必須通過恰當的檢索策略和檢索方式來限制加載對象的數目。
二級緩存:第二級別的緩存是SessionFactory級別的緩存,它是屬于進程范圍或群集范圍的緩存。這一級別的緩存可以進行配置和更改,并且可以動態加載和卸載。第二級緩存的物理介質可以是內存和硬盤,因此第二級緩存可以存放大量的數據,數據過期策略的maxElementsInMemory屬性值可以控制內存中的對象數目。管理第二級緩存主要包括兩個方面:選擇需要使用第二級緩存的持久類,設置合適的并發訪問策略:選擇緩存適配器,設置合適的數據過期策略。
查詢緩存:hibernate的查詢緩存是主要是針對普通屬性結果集的緩存, 而對于實體對象的結果集只緩存id。在一級緩存,二級緩存和查詢緩存都打開的情況下作查詢操作時這樣的:查詢普通屬性,會先到查詢緩存中取,如果沒有,則查詢數據庫;查詢實體,會先到查詢緩存中取id,如果有,則根據id到緩存(一級/二級)中取實體,如果緩存中取不到實體,再查詢數據庫。和一級/二級緩存不同,查詢緩存的生命周期 ,是不確定的,當前關聯的表發生改變時,查詢緩存的生命周期結束。
## 二、對比。

## 三、總結。
緩存對于我們來說很重要可以提高系統的性能,把一些經常用到的數據,大的數據存到緩存中這樣查詢起來比直接查詢數據庫更加高效。對于大數據量的今天緩存的應用為我們提高效率提供了可能。
PS:這個是一個關于緩存機制的博客:[http://www.blogjava.net/tbwshc/articles/380013.html](http://www.blogjava.net/tbwshc/articles/380013.html)
- 前言
- 菜鳥學習Struts——配置Struts環境
- 菜鳥學習Struts——簡易計算器
- 菜鳥學習Struts——bean標簽庫
- 菜鳥學習Struts——Scope屬性
- 菜鳥學習Struts——國際化
- 菜鳥學習Struts——總結
- 菜鳥學習Hibernate——配置Hibernate環境
- 菜鳥學習Hibernate——持久層框架
- 菜鳥學習Hibernate——簡單的一個例子
- 菜鳥學習Hibernate——簡單的增、刪、改、查操作
- 菜鳥學習Hibernate——一對多關系映射
- 菜鳥學習Hibernate——多對多關系映射
- 菜鳥學習Hibernate——緩存
- 菜鳥學習Spring——初識Spring
- 菜鳥學習Spring——第一個例子
- 菜鳥學習Spring——60s讓你學會動態代理原理
- 菜鳥學習Spring——60s使用annotation實現簡單AOP
- 菜鳥學習Spring——60s配置XML方法實現簡單AOP
- 菜鳥學習Spring——60s利用JoinPoint獲取參數的值和方法名稱
- 菜鳥學習Spring——60s學會Spring與Hibernate的集成
- 菜鳥學習SSH——目錄
- 菜鳥學習Spring——SpringMVC注解版前臺向后臺傳值的兩種方式
- 菜鳥學習Spring——SpringMVC注解版在服務器端獲取Json字符串并解析
- 菜鳥學習Spring——SpringMVC注解版將URL中的參數轉成實體
- 菜鳥學習Spring——SpringMVC注解版解析不同格式的JSON串
- 菜鳥學習Spring——SpringIoC容器基于三種配置的對比