[英]hibernate 2nd level cache via ehcache with Terracotta - Not caching at all?
[英]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提供者何時/可以緩存實體的規則適用。 如果你不熟悉它們,請閱讀它們。
希望這能讓您了解要遵循的路徑。 如果您有更多問題,請發布后續評論,我將編輯此答案。
正確的方法是:
這個故事的寓意是你沒有緩存,因為它很酷。 您緩存性能。 而且只有在證明有必要時才會優化代碼 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.