Ehcache学习(四)ehcache缓存共享

  缓存实现共享一般是在集群中很常用的,那么怎么配置呢?实现集群中缓存的方式有RMI,jgrop以及jms,我们把常用的第一种RMI方式进行详细的讲解以及实例的演示。

  由于资源有限,我在我的机器上使用同一个ip不同的端口号来进行集群的模拟,从而达到我们想要演示的目的,实现缓存的共享。(以在windows上为例)

  具体说明是:

   配置cacheManagerPeerListenerFactory 是配宿主主机配置监听程序, 来发现其他主机发来的同步请求配置 cacheManagerPeerProviderFactory 是指定除自身之外的网络群体中其他提供同步的主机列表,用“|”分开不同的主机。

   主机 B 缓存开启,并从名为 UserCache 的缓存中循环抓取键值为“key1”的元素, 直到取到, 才退出循环。 主机 A 缓存启动, 并在名为UserCache 的缓存中放入键值为“key1”的元素。显然, 如果主机 B 取到的元素,那么就证明同步成功,也就是集群成功。

 配置文件

  第一个主机配置:分别为两台机器的端口号命名为8083和8091

  在第一个主机上面本机ip:8083是这个程序中的监听主机,也就是宿主主机

  对于默认缓存以及自定义缓存开启缓存监听,这样才能访问缓存中的值



  而另一个主机的配置,也就是被监听的


  上面的配置与第一台的主机的配置相同

  值得注意的是:

  还有一点需要注意,那就是临时缓存的安放目录是不能相同的,这样的话会出现错误,说已经存在了相应的目录,也就是两个程序不能共用一个目录进行缓存,这样的话我们存放的数据是会被打乱和更改的


  但是如果是部署在不同的机器上的话,这一点是不用担心的。担心是我的这种做法,在一台机器上设置了不同的端口,此时是需要更改的,

  这样就可以了,我们可以运行测试,发现我们设置的缓存值是可以被同步的

 Ø  测试类

  第一台机器上测试类

<span style="font-family:Microsoft YaHei;font-size:14px;">/**
 * Created by xiaona on 2016/6/14.
 */
public class UsingCacheCluster {
    public static void main( String[] args ) {
        URL url =UsingCacheCluster.class.getClassLoader().getResource("ehcache.xml");
        CacheManager cacheManager=new CacheManager(url);
        //获取到cache
        Cache cache=cacheManager.getCache("UserCache");
        Element element=new Element("key1","value1");
        cache.put(element);

        Element element1=cache.get("key1");
//        System.out.println(element1.get);
        System.out.println(element1.getValue());

    }


}
</span>

  第二个主机的测试类

<span style="font-family:Microsoft YaHei;font-size:14px;">/**
 * 此时发现是可以实现同步的
 */
public class UsingCacheCluster {
    public static void main( String[] args ) throws InterruptedException {
        URL url =UsingCacheCluster.class.getClassLoader().getResource("ehcache.xml");
        CacheManager cacheManager=new CacheManager(url);
        //获取到cache
        Cache cache=cacheManager.getCache("UserCache");
        while(true) {
             Element e = cache.get("key1");
             if(e != null) {
              System.out.println(e.getValue());
              break;
              }
             Thread.sleep(1000);
             }
        System.out.println("成功");
    }
}
</span>

  此时我们运行第一台主机,从而再运行第二台主机,发现数据是可以同步进行获取的,此时表明我们的程序是成功的。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值