ehcache 二级缓存问题1

本文介绍了Ehcache如何通过RMI实现集群配置,包括`cacheManagerPeerProviderFactory`、`cacheManagerPeerListenerFactory`和`cacheEventListenerFactory`的详细配置。讲解了各个配置参数的作用,如`timeToLive`、`hostName`和复制策略等,并提供了集群中两台服务器的配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ehcache有几种方式实现集群:rmi、jgroup、jms,这里讲一下ehcache使用rmi的实现方式。

主要有三个配置:

1、cacheManagerPeerProviderFactory配置:

   <cacheManagerPeerProviderFactory

        class= “net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory”

        properties= “peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446, timeToLive=1”/>

timeToLive的值指的是数据包可以传递的域或是范围。约定如下:
0是限制在同一个服务器
1是限制在同一个子网(默认)
32是限制在同一个网站
64是限制在同一个region
128是限制在同一个大洲
255是不限制

 

2、cacheManagerPeerListenerFactory配置: 

   <cacheManagerPeerListenerFactory

        class= “net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory”

        properties= “hostName=192.168.1.101, port=40001, socketTimeoutMillis=2000”/>

hostName说明:为本机IP,不指定时hostname将使用InetAddress.getLocalHost().getHostAddress()来得到。当在同一台机器上有多个CacheManager的时候,应该用localhost来配置。

3、cacheEventListenerFactory配置:

     <cacheEventListenerFactory

        class= “net.sf.ehcache.distribution.RMICacheReplicatorFactory”

        properties= “replicateAsynchronously=true,

             replicatePuts=true,

             replicateUpdates=true,

             replicateUpdatesViaCopy=true,

             replicateRemovals=true” />

可以使用默认配置:

<cacheEventListenerFactory class=”net.sf.ehcache.distribution.RMICacheReplicatorFactory”/>

参数说明:

replicateAsynchronously=true | false – 复制方式是异步的(指定为true时)还是同步的(指定为false时)。默认是true。

replicatePuts=true | false – 当一个新元素增加到缓存中的时候是否要复制到其他的peers。默认是true。
replicateUpdates=true | false – 当一个已经在缓存中存在的元素被覆盖时是否要进行复制。默认是true。
replicateUpdatesViaCopy=true | false – 当一个元素被拷贝到其他的cache中时是否进行复制(指定为true时为复制)。默认是true。

replicateRemovals= true | false – 当元素移除的时候是否进行复制。默认是true。

附上实例:

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

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

配置server2

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

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

<cacheManagerPeerListenerFactory
        class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
        properties="hostName=192.168.1.253, port=40001,
        socketTimeoutMillis=2000"/>

 

 <cache name="MyCache"
        maxElementsInMemory="50"
        eternal="true"
    >
    <cacheEventListenerFactory
       class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
    </cache>

 

在使用手动发现成员配置的时候有一个特别需要注意的地方。

就是在配置 rmiUrls=//server1:40001/MyCahce|//server1:40001/其他缓存名称" 这里的时候

需要把你希望参与到集群的缓存名称配置进去 比如下面用到的MyCache.

 

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

<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=localhost, port=40001,
socketTimeoutMillis=2000"/>

 

properties 有效的属性是:

hostname (可选) – 运行监听器的服务器名称。标明了做为集群群组的成员的地址,同时也是你想要控制的从集群中接收消息的接口。

在CacheManager初始化的时候会检查hostname是否可用。

如果hostName不可用,CacheManager将拒绝启动并抛出一个连接被拒绝的异常。

如果指定,hostname将使用InetAddress.getLocalHost().getHostAddress()来得到。

警告:不要将localhost配置为本地地址127.0.0.1,因为它在网络中不可见将会导致不能从远程服务器接收信息从而不能复制。在同一台机器上有多个CacheManager的时候,你应该只用localhost来配置。

port – 监听器监听的端口。
socketTimeoutMillis (可选) – Socket超时的时间。默认是2000ms。当你socket同步缓存请求地址比较远,不是本地局域网。你可能需要把这个时间配置大些,不然很可能延时导致同步缓存失败。

 

Configuring Cache Replicators 上面配置3的说明

 

<cache name="sampleCache2"
  maxEntriesLocalHeap="10"
  eternal="false"
  timeToIdleSeconds="100"
  timeToLiveSeconds="100"
  overflowToDisk="false">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,
replicateUpdatesViaCopy=false, replicateRemovals=true "/>
</cache>

 

 

class – 使用net.sf.ehcache.distribution.RMICacheReplicatorFactory

这个工厂支持以下属性:
replicatePuts=true | false – 当一个新元素增加到缓存中的时候是否要复制到其他的peers. 默认是true。
replicateUpdates=true | false – 当一个已经在缓存中存在的元素被覆盖时是否要进行复制。默认是true。
replicateRemovals= true | false – 当元素移除的时候是否进行复制。默认是true。
replicateAsynchronously=true | false – 复制方式是异步的(指定为true时)还是同步的(指定为false时)。默认是true。
replicatePutsViaCopy=true | false – 当一个新增元素被拷贝到其他的cache中时是否进行复制指定为true时为复制,默认是true。
replicateUpdatesViaCopy=true | false – 当一个元素被拷贝到其他的cache中时是否进行复制(指定为true时为复制),默认是true。

你可以使用ehcache的默认行为从而减少配置的工作量,默认的行为是以异步的方式复制每件事;你可以像下面的例子一样减少RMICacheReplicatorFactory的属性配置:

 

 

<cache name="sampleCache4"
      maxEntriesLocalHeap="10"
      eternal="true"
      overflowToDisk="false"
      memoryStoreEvictionPolicy="LFU">
   <cacheEventListenerFactory
       class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
</cache>

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值