使用EhCache2.52,做缓存,缓存用的Spring3.1注解,测试用两台服务器集群EhCache,出现缓存不同步问题,访问两台服务器都各自缓存了,A服务器缓存更新,访问B服务器依旧是旧的缓存数据,数据没更新。 A服务器ehcache.xml中缓存配置如下:
<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="hostName=192.168.3.111, port=4567, socketTimeoutMillis=2000, peerDiscovery=manual, rmiUrls=//192.168.3.211:4567/param" />
<cache name="param" maxElementsInMemory="10000" maxElementsOnDisk="10000000" eternal="true" overflowToDisk="true" diskPersistent="true" memoryStoreEvictionPolicy="LFU"> <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true"/> </cache>
B服务器ehcache.xml中缓存配置如下:
<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="hostName=192.168.3.211, port=4567, socketTimeoutMillis=2000, peerDiscovery=manual, rmiUrls=//192.168.3.111:4567/param" />
<cache name="param" maxElementsInMemory="10000" maxElementsOnDisk="10000000" eternal="true" overflowToDisk="true" diskPersistent="true" memoryStoreEvictionPolicy="LFU"> <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true"/> </cache> 也曾尝试使用自动发现
<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446, timeToLive=32" /> 以及jsGroups,都无法同步缓存,其中jsGroup最新版的还不能和EhCache2.5.2组合使用,只能用2.X,而且缓存的DAO方法参数中有对象实现了序列化,ehcache-jgroupsreplication还会报错,请问这是何解啊?EhCache如何实现集群啊?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
EhCache 2.5.2 实现集群缓存同步主要依赖于 RMI 或 JGroups 等技术。从你的描述来看,你已经尝试了使用 RMI 进行手动配置和自动发现,以及 JGroups(通过 jsGroups 插件)来实现缓存的分布式同步,但遇到了不同步的问题。
java.io.Serializable
接口,因为RMI需要序列化数据进行网络传输。最后,针对具体的报错信息进行深入分析,通常能更快定位问题所在。如果还有具体错误日志或详细报错信息,进一步分析那些信息会更有助于解决问题。