2013-01-17 60 views
4

我看到很多文章說在Hibernate中使用二級緩存可以提高性能,但對使用它的缺點沒有太多的瞭解。我不希望將二級緩存視爲一種神奇的「爲了獲得更好的性能而在這裏啓用!」按鈕。任何人都可以描述使用二級緩存的缺點,以便我能意識到使用它的含義嗎?使用Hibernate的二級緩存有什麼缺點?

回答

3

缺點:

  1. 集羣部署將需要一種方法來保持高速緩存同步。我們已經使用了一個簡單的EhCache和我們自己的無效例程,並利用JGroups(努力工作 - 推薦使用它)並使用Infinispan。如果您使用infinispan路由,則需要啓用XA事務。這將需要XA驅動程序和事務管理器,無論是由您的應用程序服務器提供的,還是您必須使用Atomikos。
  2. 存在邊界情況(例如多對一或一對多情況),其中實體的更新/刪除未正確反映在集合中。例如:http://www.tikalk.com/java/forums/hibernate-second-level-cache-collection-eviction
+0

謝謝。你們兩個都提供了很好的答案,但是我已經將你的答案標記爲已接受,因爲Adrian已經有4,340個代表了:)。 –

5

在其他答案引用的點似乎有效。然而,對我而言,主要缺點是別的:

  1. 性能降低。是的,緩存不需要提供更好的性能。 Hibernate需要做額外的工作來存儲和更新緩存。如果緩存的實體頻繁更改並且不經常查詢它們,則啓用緩存只會增加不必要的額外負擔。

  2. 緩存失效。如果您的應用程序具有通過更新方式執行更新的邏輯(而不是通過更新實體)(例如,直接SQL更新,通過其他應用程序更新,批量HQL更新(我不太確定最後一種情況:P)),Hibernate將不知道實體被改變。因此,當您進行查詢時,您仍然會在更新之前獲取圖像。

+0

謝謝。你們兩個都提供了很好的答案,但我已經將kabram的答案標記爲已接受,因爲你已經有4,340個代表:)。 –

相關問題