1、什麼是緩存?
緩存是指爲了下降應用程序對物理數據源訪問的頻次,從而提升應用程序的運行性能的一種策略。
2、爲何使用緩存?
ORM框架訪問數據庫的效率直接影響應用程序的運行速度,提高和優化ORM框架的執行效率相當重要。
Hibernate的緩存是提高和優化Hibernate執行效率的重要手段,因此學會Hibernate緩存的使用和配置是優化的關鍵。
3、緩存的演示,不一樣Session沒有使用到緩存。
4、Hibernate一級緩存
一、Hibernate一級緩存又成爲Session緩存,會話級緩存。
二、經過Session從數據庫查詢實體時會把實體在內存中存儲起來,下一次查詢同一實體時再也不從數據庫獲取,而從內存中獲取,這即便緩存。
三、一級緩存的生命週期是和Session相同,Session銷燬,緩存也銷魂。
四、一級緩存的的數據只在當前會話內有效。
5、一級緩存的API
一級緩存沒法取消,用兩個方法管理。
evict():用於將某個對象從Session的一級緩存中清除。
clear():用於將一級緩存中的全部對象所有清除
使用Query的list()方法,第二次查詢內容仍是會從數據庫再次查詢數據。因此Query.list()方法不會使用緩存。
使用Query的iterate()方法,會從緩存中先檢索是否有數據,若是沒有,再進行數據庫的查詢。
list和iterate的區別:
List的獲取方式爲:List<Customers> list = query.list();
Iterator的獲取方式:Iterator<Customers> it = query.iterate();
(1)
由於他們獲取數據的方式不同,list()會直接查詢數據庫,iterator()會先到數據庫中把id都取出來,而後真正要遍歷某個對象的時候先到緩存中找,若是找不到,以id爲條件再發一條sql到數據庫,這樣若是緩存中沒有數據,則查詢數據庫的次數爲n+1次
(2)list只查詢一級緩存,而iterator會從二級緩存中查
(3)list方法返回的對象都是實體對象,而iterator返回的是代理對象
6、二級緩存
有些經常使用的數據,在一個session中緩存之後,咱們但願它在其餘的session中也可以使用,而不用再次緩存怎麼辦呢?
這種狀況下,咱們就要使用更高級別的二級緩存,每一個session公用的緩存。
7、二級緩存的使用步驟:
一、添加二級緩存對應的jar包。
二、在Hibernate配置文件中添加Provider類的描述。
三、添加二級緩存的屬性配置文件。
四、在須要被緩存的表所對應的映射文件中添加<cache />標籤。
具體實現:
一、導入緩存依賴的jar包,ehcache.jar,commons-loggin.1.xxx.jar
二、添加緩存的配置文件ehcache.xml配置文件到src目錄。
三、在hibernate.cfg.xml中添加配置信息。指定二級緩存的外部實現類。
<property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
四、在對應的hbm.xml文件中添加
<cache usage="read-only" />
cache標籤的介紹:
usage:緩存模式:
read-only:表示只讀事務模式。
transactional:
read-write:
nonstrict-read-write:
include:是否緩存延遲加載的屬性
all表示緩存全部屬性。
non-lazy:不緩存延遲加載的屬性。
region:設置了名稱後能夠在緩存配置文件ehcache.xml中對這個緩存進行單獨配置。
ehcache.xml
<defaultCache
maxElementsInMemory="10000" //表示緩存容許建立的最大對象數。
eternal="false" //表示緩存是否永久有效
timeToldleSeconds="120" //表示緩存的過時前的空閒時間,120秒
timeToLiveSeconds="1200" //表示緩存的超時時間 1200秒
overflowToDisk="true" /> //表示緩存溢出後是否保存在硬盤上。
8、二級二級緩存的總結:
一、二級緩存又稱爲」全局緩存「,應用級緩存
二、二級緩存中的數據可以使用範圍是當前全部會話。
三、二級緩存是可插拔式緩存,默認是EHCache,還支持其餘二級緩存組件:如Hashtable,OSCache,SwarmCache,JBoss TreeCache等。
二級緩存的適用場合。
一、不多被修改的數據。
二、不是很重要的數據,容許出現偶爾併發的數據。
三、不會被併發訪問的數據。
四、參考數據。
9、一級緩存和二級緩存的對比