二級緩存是sessionfactory級别的緩存,可以跨越session存在。
hibernate文檔裡關于二級緩存的說明:
二級緩存(the second level cache)
hibernate支援多種多樣的二級緩存的實作,但hibernate本身并沒有寫二級緩存的實作(有一個是用來内部測試的,不要用于産品開發),而是由其他的廠商來提供。
表 21.1. 緩存政策提供商(cache providers)
org.hibernate.cache.hashtablecacheprovider(記憶體)
org.hibernate.cache.ehcacheprovider(記憶體,硬碟)
org.hibernate.cache.oscacheprovider(記憶體,硬碟)
org.hibernate.cache.swarmcacheprovider(能用于叢集環境)
org.hibernate.cache.treecacheprovider(能用于叢集環境)
org.hibernate.cache.jbc.jbosscacheregionfactory(能用于叢集環境)
下面我們用ehcacheprovider做實驗。
這是我們以前在hibernate.cfg.xml中關于緩存的配置:
如果想要使用其他廠商提供的緩存,就要在上面做好配置:
這裡我們使用ehcacheprovider這個二級緩存
ehcacheprovider自己也有一個配置檔案:(這個配置檔案在hibernate包下的project/etc/ehcache.xml)
講二級緩存是為了應付面試的,工作中,除非必要,一般是不用二級緩存的。
有必要用二級緩存的場景:
1.經常被通路的
2.改動不大,不會經常被改動
3.數量有限
二級緩存的使用,利用注解(不是jpa的注解,是hibernate的)
例如:
nonstrict_read_write說的是非嚴格讀寫
read_only是隻讀(在二級緩存裡不允許改)
read_write是既能讀又能改
region()是對應的緩存政策名稱,不填就預設使用default
使用的時候别忘了引入ehcache的jar包:ehcache-1.5.0.jar
加入ehcache的配置檔案ehcache.xml之後,在category類上加注解:
之後進行測試:
測試結果:
hibernate:
select
category0_.id as id0_0_,
category0_.name as name0_0_
from
category category0_
where
category0_.id=?
c0
發現第二次去緩存中去取了
轉載請注明出處:http://blog.csdn.net/acmman/article/details/44132207