Hibernate緩存包括兩大類:Hibernate一級緩存和Hibernate二級緩存骇窍。
1.Hibernate一級緩存又稱為“Session的緩存”。
Session內(nèi)置不能被卸載彬犯,Session的緩存是事務范圍的緩存(Session對象的生命周期通常對應一個數(shù)據(jù)庫事務或者一個應用事務)。
一級緩存中加缘,持久化類的每個實例都具有唯一的OID斗忌。
2.Hibernate二級緩存又稱為“SessionFactory的緩存”。
由于SessionFactory對象的生命周期和應用程序的整個過程對應市栗,因此Hibernate二級緩存是進程范圍或者集群范圍的緩存缀拭,有可能出現(xiàn)并發(fā)問題咳短,因此需要采用適當?shù)牟l(fā)訪問策略,該策略為被緩存的數(shù)據(jù)提供了事務隔離級別蛛淋。
第二級緩存是可選的咙好,是一個可配置的插件,默認下SessionFactory不會啟用這個插件铣鹏。
Hibernate提供了org.hibernate.cache.CacheProvider接口,它充當緩存插件與Hibernate之間的適配器敷扫。
什么樣的數(shù)據(jù)適合存放到第二級緩存中哀蘑?
1) 很少被修改的數(shù)據(jù)
2) 不是很重要的數(shù)據(jù)诚卸,允許出現(xiàn)偶爾并發(fā)的數(shù)據(jù)
3) 不會被并發(fā)訪問的數(shù)據(jù)
4) 常量數(shù)據(jù)
不適合存放到第二級緩存的數(shù)據(jù)?
1) 經(jīng)常被修改的數(shù)據(jù)
2) 絕對不允許出現(xiàn)并發(fā)訪問的數(shù)據(jù)绘迁,如財務數(shù)據(jù)合溺,絕對不允許出現(xiàn)并發(fā)
3) 與其他應用共享的數(shù)據(jù)
Hibernate查找對象如何應用緩存?
當Hibernate根據(jù)ID訪問數(shù)據(jù)對象的時候缀台,首先從Session一級緩存中查棠赛;
查不到,如果配置了二級緩存膛腐,那么從二級緩存中查睛约;
如果都查不到,再查詢數(shù)據(jù)庫哲身,把結(jié)果按照ID放入到緩存刪除辩涝、更新、增加數(shù)據(jù)的時候勘天,同時更新緩存怔揩。