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是这个程序中的监听主机,也就是宿主主机
对于默认缓存以及自定义缓存开启缓存监听,这样才能访问缓存中的值
![](https://image.cha138.com/20221203/2accd4fd7c19415289b354f89f9c57ed.jpg)
![](https://image.cha138.com/20221203/8e2c623e15f1491089abc017959a2caf.jpg)
而另一个主机的配置,也就是被监听的
![](https://image.cha138.com/20221203/d26ba4a9f02d4c76b0170168ec20a018.jpg)
上面的配置与第一台的主机的配置相同
值得注意的是:
还有一点需要注意,那就是临时缓存的安放目录是不能相同的,这样的话会出现错误,说已经存在了相应的目录,也就是两个程序不能共用一个目录进行缓存,这样的话我们存放的数据是会被打乱和更改的
但是如果是部署在不同的机器上的话,这一点是不用担心的。担心是我的这种做法,在一台机器上设置了不同的端口,此时是需要更改的,
这样就可以了,我们可以运行测试,发现我们设置的缓存值是可以被同步的
Ø 测试类
第一台机器上测试类
<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缓存共享的主要内容,如果未能解决你的问题,请参考以下文章