2017-02-24 77 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