EhCache 分布式缓存/缓存集群  EhCache提供了很多种解决方案 这里只介绍一种最常用而且简单的RMI方式分布式缓存决绝方案

Automatic Peer Discovery 自动成员发现方式

  1. 自动的发现方式用TCP广播机制来确定和维持一个广播组。它只需要一个简单的配置可以自动的在组中添加和移除成员。在集群中也不需要什么优化服务器的知识,这是默认推荐的。
  2.  
  3. 成员每秒向群组发送一个“心跳”。如果一个成员 5秒种都没有发出信号它将被群组移除。如果一个新的成员发送了一个“心跳”它将被添加进群组。
  4.  
  5. 任何一个用这个配置安装了复制功能的cache都将被其他的成员发现并标识为可用状态。

1 首先配置多播地址 Configuring the Peer Provider 【注意自动成员发现 server1与server2的配置相同】

  1. <cacheManagerPeerProviderFactory
  2. class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
  3. properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
  4. multicastGroupPort=4446, timeToLive=32"/>

2 然后配置CacheManagerPeerListener 用来接收其他集群服务器发来的消息

  1. <cacheManagerPeerListenerFactory
  2. class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
  3. properties="hostName=192.168.1.253, port=40001,
  4. socketTimeoutMillis=2000"/>
  5.  
  6. 1 hostName=192.168.1.253 这个需要在每台服务器上配置自己的真实IP

3 在需要缓存的cache上配置 Configuring Cache Replicators 启动集群

  1. <cache name="MyCache"
  2. maxElementsInMemory="50"
  3. eternal="true"
  4. >
  5. <cacheEventListenerFactory
  6. class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
  7. </cache>

Manual Peer Discovery {#Manual Peer Discovery} 手动成员发现

  1. 进行手动成员配置要知道每个监听器的IP地址和端口。成员不能在运行时动态地添加和移除。在技术上很难使用广播的情况下就可以手动成员发现,例如在集群的服务器之间有一个不能传送广播报文的路由器。你也可以用手动成员发现进行单向的数据复制,只让server2知道server1,而server1不知道server2

假设你在集群中有两台服务器。你要同步sampleCache1和sampleCache2。下面是每个服务器需要的配置:
配置server1

  1. <cacheManagerPeerProviderFactory
  2. class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
  3. properties="peerDiscovery=manual,
  4. rmiUrls=//server2:40001/MyCache|//server2:40001/其他缓存的name"/>

配置server2

  1. <cacheManagerPeerProviderFactory
  2. class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
  3. properties="peerDiscovery=manual,
  4. rmiUrls=//server1:40001/MyCache|//server1:40001/其他缓存的name"/>

接着配置上面红色2,3步骤就可以了。

  1. <cacheManagerPeerListenerFactory
  2. class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
  3. properties="hostName=192.168.1.253, port=40001,
  4. socketTimeoutMillis=2000"/>
  5.  
  6. <cache name="MyCache"
  7. maxElementsInMemory="50"
  8. eternal="true"
  9. >
  10. <cacheEventListenerFactory
  11. class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
  12. </cache>

在使用手动发现成员配置的时候有一个特别需要注意的地方。 就是在配置 rmiUrls=//server1:40001/MyCahce|//server1:40001/其他缓存名称" 这里的时候 需要把你希望参与到集群的缓存名称配置进去 比如下面用到的MyCache.

  1.  

CacheManagerPeerListener 上面的步骤2的配置说明

  1. <cacheManagerPeerListenerFactory
  2. class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
  3. properties="hostName=localhost, port=40001,
  4. socketTimeoutMillis=2000"/>
  5.  
  6. properties 有效的属性是:
  7.  
  8. hostname (可选) – 运行监听器的服务器名称。标明了做为集群群组的成员的地址,同时也是你想要控制的从集群中接收消息的接口。
  9.  
  10. 在CacheManager初始化的时候会检查hostname是否可用。
  11.  
  12. 如果hostName不可用,CacheManager将拒绝启动并抛出一个连接被拒绝的异常。
  13.  
  14. 如果指定,hostname将使用InetAddress.getLocalHost().getHostAddress()来得到。
  15.  
  16. 警告:不要将localhost配置为本地地址127.0.0.1,因为它在网络中不可见将会导致不能从远程服务器接收信息从而不能复制。在同一台机器上有多个CacheManager的时候,你应该只用localhost来配置。
  17.  
  18. port – 监听器监听的端口。
  19. socketTimeoutMillis (可选) – Socket超时的时间。默认是2000ms。当你socket同步缓存请求地址比较远,不是本地局域网。你可能需要把这个时间配置大些,不然很可能延时导致同步缓存失败。

Configuring Cache Replicators 上面配置3的说明

  1. <cache name="sampleCache2"
  2. maxEntriesLocalHeap="10"
  3. eternal="false"
  4. timeToIdleSeconds="100"
  5. timeToLiveSeconds="100"
  6. overflowToDisk="false">
  7. <cacheEventListenerFactory
  8. class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
  9. properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,
  10. replicateUpdatesViaCopy=false, replicateRemovals=true "/>
  11. </cache>
  12.  
  13. class – 使用net.sf.ehcache.distribution.RMICacheReplicatorFactory
  14.  
  15. 这个工厂支持以下属性:
  16. replicatePuts=true | false – 当一个新元素增加到缓存中的时候是否要复制到其他的peers. 默认是true。
  17. replicateUpdates=true | false – 当一个已经在缓存中存在的元素被覆盖时是否要进行复制。默认是true。
  18. replicateRemovals= true | false – 当元素移除的时候是否进行复制。默认是true。
  19. replicateAsynchronously=true | false – 复制方式是异步的(指定为true时)还是同步的(指定为false时)。默认是true。
  20. replicatePutsViaCopy=true | false – 当一个新增元素被拷贝到其他的cache中时是否进行复制指定为true时为复制,默认是true。
  21. replicateUpdatesViaCopy=true | false – 当一个元素被拷贝到其他的cache中时是否进行复制(指定为true时为复制),默认是true。
  22.  
  23. 你可以使用ehcache的默认行为从而减少配置的工作量,默认的行为是以异步的方式复制每件事;你可以像下面的例子一样减少RMICacheReplicatorFactory的属性配置:
  24.  
  25. <cache name="sampleCache4"
  26. maxEntriesLocalHeap="10"
  27. eternal="true"
  28. overflowToDisk="false"
  29. memoryStoreEvictionPolicy="LFU">
  30. <cacheEventListenerFactory
  31. class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
  32. </cache>

本文转自:https://www.cnblogs.com/daxin/p/3568687.html

  1.  

EhCache 在集群环境中使用缓存系统的更多相关文章

  1. 深入探讨在集群环境中使用 EhCache 缓存系统

    EhCache 缓存系统简介 EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认的 CacheProvider. 下图是 EhCache 在应用 ...

  2. 在集群环境中使用 EhCache 缓存系统|RMI 集群模式

    RMI 是 Java 的一种远程方法调用技术,是一种点对点的基于 Java 对象的通讯方式.EhCache 从 1.2 版本开始就支持 RMI 方式的缓存集群.在集群环境中 EhCache 所有缓存对 ...

  3. (转)深入探讨在集群环境中使用 EhCache 缓存系统

    简介: EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认的 CacheProvider.本文充分的介绍了 EhCache 缓存系统对集群环境的 ...

  4. Oracle rac集群环境中的特殊问题

    备注:本文摘抄于张晓明<大话Oracle RAC:集群 高可用性 备份与恢复> 因为集群环境需要多个计算机协同工作,要达到理想状态,必须要考虑在集群环境下面临的新挑战. 1.并发控制 在集 ...

  5. 在 WebSphere Application Server V7 集群环境中管理 HTTP session[阅读]

    http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1012_dingsj_wascluster/1012_ding ...

  6. nginx+php负载均衡集群环境中的session共享方案梳理

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...

  7. Nginx+PHP负载均衡集群环境中Session共享方案 - 运维笔记

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...

  8. ehcache 在集群环境下 出现 Cause was not due to an IOException or NotBoundException

    RMI 远程调用地址不正确导致 <?xml version="1.0" encoding="UTF-8"?> <ehcache> < ...

  9. CAS Client集群环境的Session问题及解决方案介绍,下篇介绍作者本人项目中的解决方案代码

    CAS Client集群环境的Session问题及解决方案  程序猿讲故事  2016-05-20  原文 [原创申明:文章为原创,欢迎非盈利性转载,但转载必须注明来源] 之前写过一篇文章,介绍单点登 ...

随机推荐

  1. DataInputStream EOFEXCEPTION

    在编写socket通信时,服务端使用了DataInputStream.readUTF()读取字节流时,出现EOFEXCEPTION 原因是客户端没有使用DataOutputStream.writeUT ...

  2. JAVA NIO学习三:NIO 的非阻塞式网络通信

    紧接着上一章,我们继续来研究NIO,上一章中我们讲了NIO 中最常见的操作即文件通道的操作,但实际上NIO的主要用途还是在于网络通信,那么这个时候就会涉及到选择器,这一章我们就会对其进行讲解操作. 一 ...

  3. Q:记学习枚举过程中的一个小问题

    在学习有关java枚举的时候,我们知道了所有的枚举类型均是继承自java.lang.Enum类的,且所有的枚举常量均是该枚举类型的一个对象,且对象名即为该枚举常量的名称.例子如下:源码: public ...

  4. Life in Changsha 第一次scrum冲刺

    第一次冲刺任务 基于大局的全面性功能框架定位,要求能实现用户基于自己的需求进行的一系列操作. 用户故事 用户打开“生活在长大”的界面 程序首页展示校园服务,论坛等相关信息 用户选择某个功能 程序界面跳 ...

  5. PyCharm/WebStorm遇到Cannot start internal HTTP server

    在开始学习html.css的时候,使用PyCharm 的模拟链接到服务器的时候总是遇到 网上也没有遇到合适的解决方案,遂下载了WebStorm,希望能通过安装配置好一些设置,结果依然不行,只有从头分析 ...

  6. 【转】WEB测试要点总结

    一.输入框 1.字符型输入框: (1)字符型输入框:英文全角.英文半角.数字.空或者空格.特殊字符"~!@# ¥%--&*?[]{}"特别要注意单引号和&符号.禁止 ...

  7. socket之解决粘包方法

    low方法 import socket,subprocess ip_port=('127.0.0.1',8080) s=socket.socket(socket.AF_INET,socket.SOCK ...

  8. c# winform 视频转字符动画

    以上是大图展示, 原理比较简单,附件下载带了一个分辨率比较小的txt动画.   音乐删除了music.mp3,  如果需要自己下载一首歌曲,然后放在根目录名称“music.mp3”就可以了. 附件点我 ...

  9. VC++平台上的内存对齐操作

    我们知道当内存的边界正好对齐在相应机器字长边界上时,CPU的执行效率最高,为了保证效率,在VC++平台上内存对齐都是默认打开的,在32位机器上内存对齐的边界为4字节:比如看如下的代码: struct ...

  10. 使用sysbench对mysql压力测试

    sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.关于这个项目的详细介绍请看:https://github.com/akopytov/sy ...