EhCache分布式多台服务器共享数据
所需jar包:ehcache-core-2.6.6.jar、slf4j-api-1.6.6.jar、slf4j-log4j12-1.6.6.jar、junit-4.11.jar
第一、我们需要了解ehcache.xml配置信息含义.这个配置文件在ehcache-core-2.6.6.jar包里面有一个默认(default)的xml文件.
我们打开ehcache-failsafe.xml文件
下面仅当个人理解,希望对你们有帮助
<diskStore>,它的作用是当设置了缓存溢出的时候写到硬盘中(overfolowToDisk) 或 数据在硬盘持久化(diskpersistent)时,所必须要的参数。
path:这里有几个选择方案,当然根据上面的解释,个人翻译是这样的
path="user.home"---------用户根目录
path="user.dir"---------用户当前工作项目目录
path="java.io.tmpdir"---------默认模版文件路径,个人猜测这里应该这样eg:E:\\ehcacheDir
path="ehcache.disk.store.dir"-------一个你在命令行指定的系统属性
后续还有很多注解就自己看了。下面还是给如何去使用,这里我看了一篇博客(http://blog.youkuaiyun.com/bjyfb/article/details/7939672),但是参照下始终无法实现。
这里我写下我的解释:
ehcache.xml:
这里监听192.168.1.223:40001,与192.168.1.223:40002信息同步.
那么就需要一个192.168.1.223:40002的server
所以还需要一个配置文件.
ehcache2.xml:
就是在ehcache.xml中修改192.168.1.223:40001 => 192.168.1.223:40002 , 192.168.1.223:40002 => 192.168.1.223:40001
这里很重要,不然就无法获取到缓存数据.
接下来,我们就开始测试
创建TestCacheGet.Class:
package cn.springmvc.test.chcache;
import java.net.URL;
import cn.springmvc.test.bean.UserBean;
import junit.framework.TestCase;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
public class TestGetCache extends TestCase {
public void testGet() throws Exception {
URL url = TestGetCache.class.getClassLoader().getResource(
"conf/ehcache.xml");
CacheManager manager = new CacheManager(url);
Cache cache = manager.getCache("metaCache");
while (true) {
System.out.println("搜索中...");
System.out.println("当前资源数:" + cache.getSize());
Element element = cache.get("key");
if (element != null) {
UserBean user = (UserBean)element.getValue();
System.out.println(user.getUserName());
break;
}
Thread.sleep(3000);
}
}
}
创建TestCachePut.Class:
package cn.springmvc.test.chcache;
import java.net.URL;
import cn.springmvc.test.bean.UserBean;
import junit.framework.TestCase;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
public class TestPutCache extends TestCase {
public void testPut(){
URL url = TestPutCache.class.getClassLoader().getResource(
"conf/ehcache2.xml");
CacheManager manager = new CacheManager(url);
Cache cache = manager.getCache("metaCache");
UserBean user = new UserBean();
user.setUserName("张三");
Element element = new Element("key",user);
cache.put(element);
manager.shutdown();
System.out.println("已放入缓存!");
}
}
执行Junit:
现执行TestCacheGet.Class
再执行TestCachePut.Class
接着在TestCacheGet.Class的打印报告中出现: