Java EhCache是否利用了所有节点';像MemCached这样的内存?

Java EhCache是否利用了所有节点';像MemCached这样的内存?,java,memcached,ehcache,shared-memory,distributed-caching,Java,Memcached,Ehcache,Shared Memory,Distributed Caching,文档中提到数据是跨节点分布的。这就是他们对分布式缓存的定义。如果节点a需要节点B上的数据,数据将从B传输到a。如果a崩溃,存储在a上的所有数据将不再可供B使用 但是,EhCache对的定义不同。基本上,它更像是共享内存而不是分布式缓存。如果节点A修改某些数据,节点B将看到该修改。如果A崩溃,则存储在共享内存中的任何数据A仍可供节点B使用 这就引出了两个问题: 如果我有3个节点A、B、C,每个节点都有1GB的内存,那么MemCached似乎会增加内存,使节点看起来总共有3GB的内存。然而,看起来E

文档中提到数据是跨节点分布的。这就是他们对分布式缓存的定义。如果节点a需要节点B上的数据,数据将从B传输到a。如果a崩溃,存储在a上的所有数据将不再可供B使用

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

这就引出了两个问题:

  • 如果我有3个节点A、B、C,每个节点都有1GB的内存,那么MemCached似乎会增加内存,使节点看起来总共有3GB的内存。然而,看起来EhCache并没有添加3gb,而是允许每个节点之间最多1GB的共享内存。这是正确的吗

  • 如果答案是1。是的,那么得出EhCache和MemCached实际上是互补的而不是竞争的结论是正确的吗


  • 说到Ehcache做什么,我不是Memcache方面的专家

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

    那么,为什么分层缓存很酷呢?它是如何使用客户机中的内存的。在堆上和堆外的本地层中,您可以拥有一致的数据,高达数百Gig,在进程中只需几微秒,在远程层中则需要几毫秒。所有的数据都可以是HA

    您可以在此处阅读更多关于这些内容的信息:

    在这里:

    当然: ehcache.org 和
    terracotta.org

    我对两者都有一些经验

    我会对你的两个问题说“是”

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

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


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

    ,TSA节点会在内存中保留1GB的数据,并将剩余的2GB溢出到磁盘上(或多或少)?