2013-01-16 48 views
1

我打算在Web應用程序中實現緩存。哪一個是最好的Spring Cache抽象或Hibernate EHCache?

我已經在我之前的一個Web應用程序中使用了Hibernate EHCache。

現在有一天,最近我才知道在最新的Spring發行版中有Cache Abstraction層。

因此,我想它只是Hibernate EHCache的包裝,或者它是Spring本身提供的緩存功能。

如果不同,那麼想知道哪個是最好的或更好的選擇使用緩存?

另外,我從幾篇文章中知道Hibernate EHCache不支持集羣,是嗎?因爲大型Web應用程序需要集羣。

我在Web應用程序中使用了Spring 3.1和Hibernate 3.3。

+1

親愛的Downvoters,請讓我知道投票的理由嗎? –

+0

是的,必須有一種方法讓被問到的人知道他的問題爲什麼被低估 – vigamage

回答

2

Hibernate和EHCache是​​不同的東西。

EHCache是​​緩存提供者,即緩存的實際實現。

休眠可以使用 L2緩存的多個不同提供者,包括EHCache。

Spring Cache是​​緩存方法調用的框架。它可以使用使用多個不同的提供商,包括EHCache。

EHCache以幾種模式提供分佈(集羣),從基本的JMS驅動的同步到Terracotta BigMemory分佈。 Hibernate L2緩存應該支持集羣。

Spring Cache與Hibernate無關,但可以與EHCache並行使用Hibernate L2緩存和Spring Cache(方法緩存)作爲兩者的底層提供者。

0

Hibernate緩存繼續與Spring使用EhCache(或另一個緩存提供程序)一起使用。它提供了一個二級緩存,用於存儲em.find(鍵)實體和關係(@Cache註釋或XML),以及在q.setHint(「org.hibernate.cacheable」,true)時進行查詢緩存。這些都是完整的,有據可查的。 Spring緩存對此不需要。但是Spring提供了獨立於Hibernate緩存的方法緩存,並且仍然可以使用EhCache作爲緩存提供者(與Hibernate共享EhCache)。這可能有點令人困惑,因爲EhCache配置是重疊的,但本質上Spring緩存允許您獨立緩存標記爲@Cacheable的方法的結果。

注1:Spring/Method緩存沒有與Hibernate集成。 Hibernate無法識別或維護使用方法緩存進行緩存的結果。

注2:Hibernate查詢緩存不推薦用於高度分佈式系統,而不能很好地理解如何使用緩存。它增加了由於使用共享實體時間戳緩存而導致的死鎖風險,Hibernate保持跟蹤緩存的查詢結果何時被驅逐。

相關問題