Ehcache学习ehcache缓存共享

Posted 李晓娜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>

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

以上是关于Ehcache学习ehcache缓存共享的主要内容,如果未能解决你的问题,请参考以下文章

ehcache与redis的比较与应用场景分析(转)

ehcache缓存

Shiro如何使用Ehcache实现Session共享

重学SpringBoot系列之EhCache缓存,缓存问题

mybatis学习笔记(14)-mybatis整合ehcache

Mybatis学习整合第三方缓存EHCache