2010-03-02 69 views

回答

5

當一個查詢被緩存時,NHibernate會緩存查詢產生的實體的ID。

非常重要的是,它不會緩存實體本身 - 只有它們的ID。這意味着您幾乎可以確定要確保這些實體在您的二級緩存中也被設置爲可緩存。否則,NHiberate將從查詢緩存中獲取實體的ID,但是隨後會被迫去到數據庫以獲取實際的實體。這可能比首先進入數據庫更昂貴!

同樣重要的是:查詢基於其確切的SQL和參數值進行緩存。這兩者之間的任何差異都意味着數據庫將被擊中。所以你可能只想緩存那些在輸入方面有小差異的查詢。

0

通過使用它,nHibernate不需要訪問數據存儲,它訪問緩存中的內容。

+0

這可能是實體緩存。 – Amitabh 2010-03-02 17:33:32

2

當您啓用緩存時,nHibernate將在執行查詢時將查詢結果存儲在某處。當您嘗試再次使用SAME參數執行查詢時,它將從緩存中獲取結果,而不是從數據庫中獲得結果,當然速度更快!但要注意其他應用程序可以在後臺修改數據庫!但nHibernate可以更新緩存。