2010-11-02 126 views
5

嗨: 我很困惑什麼是緩存的休眠緩存。休眠緩存保存什麼?

從文檔中,我知道在hibernate中有緩存的類型。

第一級:交易級別。 似乎要將會話持久化的實體緩存在此處。

二級緩存:我真的不知道這個緩存,從api,它說這個緩存工作在sessionfactory級別...我不明白。

查詢緩存:這很容易理解我(也許我錯了)。它緩存查詢參數以及相關的實體。

這就是我所知道的有關hibernate中的緩存。

任何人都可以給我更多的細節?

順便說一句,我不擅長sql/jdbc工作,所以我也想知道我應該如何知道有關sql/jdbc的知識,以瞭解更多關於hibernate(任何文檔?我不想只是一個hibernate用戶,因爲它只是一個工具,我想要的是從這個美妙的框架中學習一些東西。 :)

回答

3

一級緩存

此緩存默認情況下啓用。 當NHibernate通過數據庫的唯一ID加載實體時,它會自動放入所謂的身份映射中。此標識映射表示第一級緩存。

第一級緩存的生命期與當前會話耦合。一旦當前會話關閉,相應第一級緩存的內容將被清除。一旦一個實體處於第一級緩存中,想要加載當前會話中相同實體的後續操作將從緩存中檢索此實體,並且不需要往返數據庫。

此實體映射背後的主要原因之一是避免內存中兩個不同實例可以表示相同數據庫記錄(或實體)的情況。

(改編自NH FAQ)

二級緩存

這緩存是單個會話範圍緩存上方。有了這個緩存,您可以節省很多往返數據庫的時間,因爲任何會話中的任何人第一次加載確定的實體時,它將保留在緩存中,所以下一個請求(來自任何其他會話)將從緩存中獲取它。

要使用L2緩存,您將需要一個緩存提供程序,例如SysCache或Memcache。這些人將存儲緩存實體的值作爲數組字符串由實體的ID進行散列。請注意,它不是緩存的.net對象,而只是它的值。

據說它綁定到會話工廠,因爲緩存將用於確定會話工廠創建的會話,因此不同會話工廠創建的會話將不共享緩存。會議工廠的概念是否清楚?

查詢緩存

這是一個非常簡單的,但有一個陷阱。它會緩存查詢及其參數,但不會緩存返回的實體。它只會緩存它們的Id,所以它只對L2緩存有意義,因爲它包含與該Id相關的值。

NHiernate的有關高速緩存FAQ條目:

https://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

+0

謝謝你,你的答案是相當有用!我現在有點清楚。順便說一句,關於數據庫相關的任何文檔知道更多關於休眠? – hguser 2010-11-02 12:54:52

+0

我建議你購買Hibernate In Action:http://www.amazon.com/Hibernate-Action-Christian-Bauer/dp/193239415X – Pedro 2010-11-02 13:09:13