2017-02-24 98 views
2

我已經在使用ehcache進行spring cahing了。對我來說,它就像暴露不同的API集合以及它們的實現一樣。Spring ehcache vs Memcached?

什麼是除了API /執行他們 之間在功能方面有什麼區別?

更新: -我已經看到Hibernate EHCache vs MemCache,但這個問題主要是從休眠狀態的角度,但我的問題是,一般對於任何緩存服務。該問題的答案還指出,在功能方面沒有太大差別

+0

看看這個問題http://stackoverflow.com/questions/14029366/hibernate-ehcache-vs-memcache – Neeraj

+0

@neeraj我發佈之前就看過這個問題。其實這個問題是從休眠角度來看的。我的問題是一般的任何緩存服務 –

回答

2

除了您提到的API差異之外,這裏的主要區別在於memcached存在於不同的進程中,而Ehcache在JVM內部 -​​ 除非配置爲存儲在磁盤上或集羣中。

這主要意味着,使用Memcached,您需要總是需要您的對象的序列化版本,並且您總是與不同的進程交互,遠程或不遠程。

的Ehcache和其他基於JVM的緩存解決方案,先從上堆基於緩存最初允許查找是簡單的有關處理引用您的Java對象。

當然,這意味着該物體保持住在Java堆,增加內存壓力。在Ehcache 3.x的情況下,您可以選擇遷移到offheap memory以上,從而在不影響JVM堆的情況下增加緩存。

在這一點上,Memcached的的好處可能是,你要非Java客戶端來訪問它。

,最終決定確實是在你的手中。緩存消耗內存來減少延遲。對你有用的東西可能與對別人有用的東西不同。你必須測量和決定。

+0

當你說'memcached生活在一個不同的過程中'是否是強制性的?如果我想在與web服務器相同的jvm進程中使用該怎麼辦?你也說過,「這當然意味着這些東西繼續存在於爪哇堆中,增加了內存壓力。我的意思是它的ehcache或memcached對象是否會存儲在堆中。唯一的區別是在memcached的情況下,堆將會分離到獨立的進程。不是嗎? –

+0

'最後一點'Memcached的好處可能是您希望非Java客戶端訪問它',memcached是否公開了webservices以允許非java客戶端訪問該對象? –

+2

Memcached不是一個Java程序。它是一個獨立的服務器。所以它永遠不會存儲在堆上。是。 Memcached擁有專有的API。但你仍然需要用你想要的語言找到一個客戶。在的Ehcache內存之中,直接有一個客戶端(即也可以用來跟兵馬俑羣) – Henri