MemCached文档提到的数据是跨节点分布的.这是他们对分布式缓存的定义.如果节点A需要节点B上的数据,则数据从B传输到A.如果A崩溃,则存储在A上的所有数据不再可用于B.
但是,EhCache有一个不同的distributed caching定义.基本上,它更像是共享内存而不是分布式缓存.如果节点A修改某些数据,则节点B将看到该修改.如果A崩溃,则存储在共享存储器中的任何数据A仍可供节点B使用.
这引出了两个问题:
>如果我有3个节点A,B,C每个都有1GB的内存,似乎MemCached将添加内存并使它看起来像节点的总共3 GB的内存.但是,似乎EhCache不添加3 GB,而是在每个节点之间允许最多1GB的共享内存.它是否正确?
>如果回答1.是肯定的,那么断定EhCache和MemCached实际上是互补而不是竞争是否正确?
解决方法:
我对两者都有一些经验.
我对你的两个问题说’是’.
我一直在和Hibernate一起使用ehcache.它将在*数据库中找到的数据缓存在群集中的多个服务器节点上的内存中.原因当然是减少数据库访问.如果一个节点写入缓存的值,则该值应在其他节点上失效,以强制它们重新读取数据库中的值,然后重新缓存它.
Memcached我用作数据源.这是一个简单的key = value数据库.在每个服务节点上,您可以定义可以使用的memcached节点列表.然后它会写入某个节点(通过循环我猜).密钥包含有关存储该值的memcached节点的信息.
所以根据我的经验,memcached是一个经常分布的数据库(不是关系类型,但仍然是数据库),而ehcache更像是传统的缓存.