我越瞭解NHibernate的L2緩存,它越似乎給我說,你主要來自它只有在以下情況下受益:Nhibernate二級緩存會在哪種情況下提高性能?
- 您主要是通過編號查詢和...
- 您主要查詢靜態數據,和/或
- 您希望經常運行相同的查詢(這實際上讓我們回到查詢ID,因爲查詢緩存僅存儲返回的一組ID)。
我在這種理解中錯了嗎?如果是這樣,還有什麼其他情況可以產生巨大的性能提升?
我越瞭解NHibernate的L2緩存,它越似乎給我說,你主要來自它只有在以下情況下受益:Nhibernate二級緩存會在哪種情況下提高性能?
我在這種理解中錯了嗎?如果是這樣,還有什麼其他情況可以產生巨大的性能提升?
你的問題似乎更多地與緩存模式相關,而不是NHibernate二級緩存。見Cache (computing)。
...緩存是如此,對於該數據的未來請求可以更快地服務透明地存儲數據的組件......
就是這樣。如果您的應用程序正在執行任何性能破壞性操作,則二級緩存可以幫助您更快地爲它們提供服務。
NHibernate通過它們的一組參數(分頁,排序,過濾器...)來緩存查詢,所以即使在簡單的情況下,爲家庭或開始頁面提供所有文章,僱員,任務的列表...幾乎服務於所有用戶...您可以節省時間和資源。
當基礎數據發生變化時,高速緩存將被清除,新數據將被重新加載。
因爲有非常聰明的緩存提供程序,所以即使在web-farm中也可以使用NHibernate和緩存。這是您應該經歷的第一次閱讀:First and Second Level caching in NHibernate
SO:不僅用於通過ID或靜態數據獲取。即使在高流量的事務性應用程序中,二級緩存也可以提高性能。因爲即使很短的時間,你可以從緩存(如memeora),並保存一些毫秒數據...
我想我的困惑是這樣的:如果我通過類似的查詢'...查詢( ).Where(x => x.PropertyA == myVar)',緩存將不會被使用,除非該查詢已經運行並且它的時間戳仍然有效?即如果您希望大部分查詢都是唯一的,那麼第二級緩存不會真的讓您受益? –
Handprint
我想說,從我的經驗來看,幾乎經常有「執行相同」查詢的情況。我不知道你的情況,但從我的經驗來看,緩存總是有好處的。但是如果你說,每個查詢都是唯一的,那麼緩存不能帶來任何好處。問題只有在這是真的。 –