簡體   English   中英

緩存(Ehcache) - Hibernate二級緩存和Spring

[英]Caching (Ehcache) - Hibernate 2nd level cache and Spring

在我的Web應用程序(Spring 3.1,Hibernate 4)中,我使用Ehcache進行Hibernate二級緩存和Spring @Cache。 我想知道,在哪里使用Hibernate Cache和Spring Cache?

例如,我有幾個域類(在數據庫中查看),我在屏幕上使用它作為查找值。 我可以使用Hibernate二級緩存和Spring @Cache緩存它們。

因此,在我的服務層中,如果我使用Spring @Cache緩存這些域對象,我會收到這些對象,而不會在緩存時完全訪問持久層(hibernate HQL查詢)。 這是正確的方法嗎?

取決於您的圖層架構。

假設您有三個服務(或同一服務中的三個方法)都返回一組Customer實體,即域對象。 如果在服務層緩存,則單個數據庫記錄的相同表示很可能會多次存在於緩存中。 它們是基本相同信息的多個對象。 為什么? 因為Service.getWhateverCustomers(String)Service.getWhateverCustomers(String, Integer)結果存儲在兩個不同的緩存鍵下。

如果您使用JPA @Cachable批注在實體級別進行緩存,則無論您使用哪種服務或服務方法調用實際檢索實體的代碼,都會緩存您的Customer實體。 當然,關於JPA提供者何時/可以緩存實體的規則適用。 如果你不熟悉它們,請閱讀它們。

希望這能讓您了解要遵循的路徑。 如果您有更多問題,請發布后續評論,我將編輯此答案。

正確的方法是:

  1. 問問自己是否需要搞亂緩存的復雜性。 您的應用無法滿足要求嗎?
  2. 只有當前一個問題的答案為“是”時,才能對您的應用進行分析,以找出性能問題的位置。
  3. 確定解決步驟2中確定的性能問題的適當方法。它可能涉及也可能不涉及緩存以防止代價高昂的操作。 如果它確實涉及緩存,那么緩存和使用哪個緩存的位置應該非常清楚,因為您將確切地知道您正在嘗試防止發生什么。

這個故事的寓意是你沒有緩存,因為它很酷。 您緩存性能。 而且只有在證明有必要時才會優化代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM