一个ehcache RMI集群里面有三个节点【A,B ,C】,他们依次启动,B节点不能同步A B连个节点所有数据,两端节点A,C可以同步其它两个节点所有信息。为什么?
A节点测试代码
// PropertyConfigurator.configure("src/main/config/log4j.properties");
CacheManager manager = new CacheManager("src/test/config/ehcache_cluster1.xml");
// 取得Cache
Cache cache = manager.getCache("UserCache");
Element element = new Element("client1" + System.currentTimeMillis(), "client1");
cache.put(element);
while (true)
{
Thread.sleep(5000);
System.out.println("\n");
for (Object key : cache.getKeys())
{
System.out.println(key + ":" + cache.get(key));
}
B节点测试代码
CacheManager manager = new CacheManager("src/test/config/ehcache_cluster2.xml");
Cache cache = manager.getCache("UserCache");
Element element = new Element("client2" + System.currentTimeMillis(), "client2");
cache.put(element);
while (true)
{
Thread.sleep(5000);
System.out.println("\n");
for (Object key : cache.getKeys())
{
System.out.println(key + ":" + cache.get(key));
}
}
C节点测试代码
CacheManager manager = new CacheManager("src/test/config/ehcache_cluster3.xml");
Cache cache = manager.getCache("UserCache");
Element element = new Element("client3" + System.currentTimeMillis(), "client3");
cache.put(element);
while (true)
{
Thread.sleep(5000);
System.out.println("\n");
for (Object key : cache.getKeys())
{
System.out.println(key + ":" + cache.get(key));
}
}
ehcache_cluster1.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual,
rmiUrls=//localhost:40002/UserCache|rmiUrls=//localhost:40003/UserCache" />
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=localhost,port=40001, socketTimeoutMillis=2000" />
<cache name="UserCache" maxElementsInMemory="10000" >
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=false, replicatePuts=true,
replicatePutsViaCopy=true, replicateUpdates=true,
replicateUpdatesViaCopy=true, replicateRemovals=true,
asynchronousReplicationIntervalMillis=200" />
<bootstrapCacheLoaderFactory
class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" />
</cache>
</ehcache>
ehcache_cluster2.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual,
rmiUrls=//localhost:40001/UserCache|rmiUrls=//localhost:40003/UserCache" />
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=localhost,port=40002, socketTimeoutMillis=2000" />
<cache name="UserCache" maxElementsInMemory="10000">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=false, replicatePuts=true,
replicatePutsViaCopy=true, replicateUpdates=true,
replicateUpdatesViaCopy=true, replicateRemovals=true,
asynchronousReplicationIntervalMillis=200" />
<bootstrapCacheLoaderFactory
class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" />
</cache>
</ehcache>
ehcache_cluster3.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual,
rmiUrls=//10.114.195.218:40001/UserCache|rmiUrls=//10.114.195.218:40002/UserCache" />
<cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=10.114.195.218,port=40003, socketTimeoutMillis=2000" />
<cache name="UserCache" maxElementsInMemory="10000">
<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=false, replicatePuts=true,
replicatePutsViaCopy=true, replicateUpdates=true,
replicateUpdatesViaCopy=true, replicateRemovals=true,
asynchronousReplicationIntervalMillis=200" />
<bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" />
</cache>
</ehcache>
相关推荐
Ehcache RMI Replicated Cluster 是一种分布式缓存解决方案,它使用远程方法调用(RMI)技术在多个节点之间复制数据,以实现高可用性和负载均衡。在大型分布式系统中,缓存是提高应用程序性能的关键组件,因为它可以...
在这个“ehcache rmi集群demo”中,我们将探讨如何将Ehcache与RMI结合,实现一个跨节点的缓存集群。 首先,Ehcache的核心概念包括缓存管理器(Cache Manager)、缓存(Cache)、缓存项(Cache Entry)等。缓存管理...
Ehcache利用JGroups来实现节点间的通信和数据同步,确保即使在某个节点失败时,数据也能在集群中保持一致。 Ehcache集群实现主要涉及以下几个核心概念: 1. **复制策略**:Ehcache提供了几种复制策略,如`...
在Ehcache中,RMI用于在集群节点间交换元数据和缓存更新。RMI接口使得远程调用看起来就像本地调用一样,简化了Ehcache集群的编程模型。 4. **Ehcache集群配置**:要设置Ehcache集群,首先需要配置`ehcache.xml`或...
描述部分提到的“Ehcache集群配置手册帮助你梳理Ehcache集群部署的配置”,意味着本手册旨在为开发者提供一个详细的指南,指导如何通过远程复制技术配置Ehcache集群,以实现缓存数据的一致性和同步。在分布式系统中...
在实现Ehcache RMI集群时,还应注意性能优化,包括合理设置缓存大小、过期策略、并发级别等。此外,考虑使用网络优化技术,如使用NIO或者调整RMI超时设置,以减少网络延迟。 **7. 监控与故障排查** 部署Ehcache集群...
Ehcache 是一个广泛使用的开源 Java 缓存解决方案,它支持通过 Remote Method Invocation (RMI) 实现节点间的通信和数据同步。Ehcache RMI manual discovery 模式允许开发者手动配置集群中的节点,以实现它们之间的...
在集群环境中,EhCache通过RMI(远程方法调用)或JGroups协议实现节点间的通信,保证了缓存数据的一致性。 二、EhCache在集群环境中的应用 1. 数据共享:在集群环境中,多个服务器节点可以共享同一份缓存数据,减少...
Ehcache分为三个主要部分:内存缓存、磁盘存储和缓存复制。内存缓存用于存储最近使用的数据,以实现快速访问;磁盘存储用于保存当内存满时的数据,保证数据不丢失;而缓存复制则是在分布式环境下,确保多节点间的...
ehcache的分布式缓存机制通过RMI或特定API实现节点间的数据同步。集群配置通常涉及以下步骤: - 定义集群模式,如复制或分区。 - 设置集群通信协议和端口。 - 配置数据一致性策略,如写入策略和故障恢复机制。 - ...
2. **Replication(复制)**:当一个节点中的缓存项更新时,该更新会自动复制到其他节点,确保所有节点的数据同步。 3. ** Terracotta Server Array**:使用Terracotta服务器,可以实现EHcache的集群管理,提供高...
3. **分布式缓存**:Ehcache 2.10.5支持集群环境下的分布式缓存,这意味着多个服务器可以共享同一个缓存,提高系统的可扩展性。它通过RMI(Remote Method Invocation)或 Terracotta Server Array 实现跨节点的数据...
通过RMI(远程方法调用)或Terracotta服务器,可以实现多个节点间的缓存同步,确保数据的一致性。 在源码中,你可以看到Ehcache是如何通过线程安全的方式管理缓存的,以及如何高效地进行缓存查找、插入和移除操作。...
d) **JGroups**:JGroups是一个集群通信库,Ehcache利用它实现节点间的通信和一致性。 e) **Ehcache自身的复制机制**:通过内置的复制机制,实现节点间的缓存数据复制。 3. Ehcache与其他缓存框架对比: - **...
2. **分布式缓存**:多个节点之间共享数据,适用于集群环境。 3. **复制缓存**:通过网络复制数据到其他节点,保持数据的一致性。 #### 二十、分布式缓存(Distributed Caching) 1. **RMI 复制**:通过 RMI 实现...
- **RMI**: 通过RMI协议实现远程方法调用来同步各个节点上的缓存。 - **TCP**: 使用自定义的TCP/IP协议进行通信。 - **其他插件**: 如使用Redis或Memcached作为中间件,实现数据的同步。 在ehcache.xml中可以配置...