面試題:在Hibernate中,使用二級緩存機制要注意什么?
答案:Hibernate 中使用二級緩存時要注意的幾點如下。
二級緩存能夠明顯提高系統的性能,當然,如果數據量特別巨大,此時不適合于二級緩存,原因是緩存的數據量過大可能會引起內存資源緊張,反而降低性能。
對于數據更新頻率過高的數據,頻繁地同步緩存中數據的代價可能和查詢緩存中的數據從中獲得的好處相當,壞處和益處相抵消,此時緩存的意義也不大。
財務數據等是非常重要的數據,不允許出現或使用無效的數據,所以此時為了安全期間,建議不要使用二級緩存。因為此時“正確性”的重要性遠遠大于“高性能”的重要性。
因為數據表中的數據量雖然大,但是經常使用的往往只是較新的那部分數據,此時,也可以為其配置二級緩存。但是必須單獨配置其持久化列的緩存策略,比如最大緩存數、緩存過期時間等,將這些參數降低至一個合理的范圍,同事也會消耗更多的內存,可以通過配置文件來制定內存中能夠加載的最多元素,這有利于避免消耗過多的內存。
知識拓展:Cache是在提升系統性能方面常用的方法,Hibernate中對于Cache有一級緩存和二級緩存的概念,一級緩存是必須的,位于Session部分,二級緩存則不是必須的,是由sessionFactory控制的進程級緩存,由于開發人員自行指定。二級緩存可指定使用何種開源的Cache工具,Hibernate 3以后的版本默認使用的是Ehcache,也可以切換為Oscache、JbossCache。查詢時使用緩存的實現過程如下。
(1)查詢一級緩存中是否具有需要的數據。
(2)如果沒有,查詢二級緩存
(3)如果二級緩存中也沒有,此時在執行查詢數據庫的工作。
此3種方式的查詢速度依次降低。
Hibernate 會自行維護緩存中的數據,以保證緩存中的數據和數據庫中的真實數據的一致性。無論何時,當你調用方法傳遞或獲得一個對象時,該對象都將被加入到Session的內部緩存中。當flush()方法隨后被調用時,對象的狀態回合數據庫取得同步。也就是說,刪除、更新、增加數據的時候,同時更新緩存。