EhCache是​​否利用MemCached等所有节点的内存?

时间:2011-10-08 22:44:03

标签: java memcached ehcache shared-memory distributed-caching

MemCached文档提到数据跨节点分布。这是他们对分布式缓存的定义。如果节点A需要节点B上的数据,则数据从B传输到A.如果A崩溃,则存储在A上的所有数据都不再可用于B.

但是,EhCache对distributed caching的定义不同。基本上,它更像是共享内存而不是分布式缓存。如果节点A修改某些数据,则节点B将看到该修改。如果A崩溃,则存储在共享内存中的任何数据A仍可供节点B使用。

这引出了两个问题:

  1. 如果我有3个节点A,B,C各有1GB内存,似乎MemCached会添加内存并使它看起来像节点的总共3 GB内存。但是,似乎EhCache不添加3 GB,而是在每个节点之间允许最多1GB的共享内存。这是对的吗?

  2. 如果对1的回答是肯定的,那么断定EhCache和MemCached实际上是互补而不是竞争是否正确?

2 个答案:

答案 0 :(得分:4)

就Ehcache所做的事情而言,因为我不是Memcache的专家。

Ehcache是​​一个“分层缓存”。它允许您在每一层进行放大和扩展。如果你有3个服务器节点的Ehcache(实际上服务器层是TSA,Terracotta服务器阵列),每个服务器节点都有唯一的数据,因此不包括可以交换到磁盘的3gig。可以将TSA配置为使用磁盘持久性进行HA和/或主动被动故障转移。插入BigMemory后,您可以将这些层中的任何一层扩展到数百个ram,而不必担心GC问题。

那为什么分层缓存很酷?这就是它如何在您的客户端中使用内存。您可以拥有连贯的数据,最多可达数百个演出,只需几秒钟即可在堆上和离堆本地层进行处理,也可以在远程层上使用毫秒数。并且所有数据都可以是HA。

你可以在这里阅读更多关于这些内容的信息:

http://scaleaholic.blogspot.com/2010/09/little-bit-about-bigmemory-for-ehcache.html

在这里:

http://scaleaholic.blogspot.com/2011/08/what-is-terracotta.html

当然: ehcache.org 和 terracotta.org

答案 1 :(得分:2)

我对两者都有一些经验。

我对你的两个问题说'是'。

我一直在和Hibernate一起使用ehcache。它将在中央数据库中找到的数据缓存在群集中的多个服务器节点上的内存中。原因当然是减少数据库访问。如果一个节点写入缓存值,则该值应在其他节点上失效,以强制它们重新读取数据库中的值,并重新缓存它。

Memcached我用作数据源。这是一个简单的key = value数据库。在每个服务节点上,您可以定义可以使用的memcached节点列表。然后它会写入某个节点(通过循环我猜)。密钥包含有关存储值的memcached节点的信息。

根据我的经验,memcached是一个经常分布的数据库(不是关系类型,但仍然是数据库),而ehcache更像是传统的缓存。