`
wusuoya
  • 浏览: 629529 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

缓存之ehcache 之使用

 
阅读更多

1. EHCache 的特点,是一个纯Java ,过程中(也可以理解成插入式)缓存实现,单独安装Ehcache ,需把ehcache-X.X.jar 和相关类库方到classpath中。如项目已安装了Hibernate ,则不需要做什么。。直接可以使用Ehcache 

Maven引入jar包  

    <!-- ehcache begin. -->
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache-core</artifactId>
            <version>2.5.1</version>
        </dependency>
        <!-- ehcache end. -->



Cache 存储方式 :内存或磁盘 

2. 单独使用 EHCache 

使用CacheManager 创建并管理Cache 
1.创建CacheManager有4种方式: 


A:使用默认配置文件创建 

 

java代码:
  1. CacheManager manager = CacheManager.create();  

 

B:使用指定配置文件创建 

java代码:
  1. CacheManager manager = CacheManager.create("src/config/ehcache.xml");  


C:从classpath中找寻配置文件并创建 

 

java代码:
  1. URL url = getClass().getResource("/anothername.xml");  
  2. CacheManager manager = CacheManager.create(url);  

 

D:通过输入流创建

 

java代码:
  1. InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath());  
  2. try {  
  3. manager = CacheManager.create(fis);  
  4. finally {  
  5. fis.close();  
  6. }  

 

 

卸载CacheManager ,关闭Cache 

 

java代码:
  1. manager.shutdown();  

 

 

使用Caches 

取得配置文件中预先 定义的sampleCache1设置,通过CacheManager生成一个Cache 

 

 

java代码:
  1. Cache cache = manager.getCache("sampleCache1");  

 

设置一个名为test 的新cache,test属性为默认 

java代码:
  1. CacheManager manager = CacheManager.create();  
  2. manager.addCache("test");  

 

设置一个名为test 的新cache,并定义其属性 

 

java代码:
  1. CacheManager manager = CacheManager.create();  
  2. Cache cache = new Cache("test"1truefalse52);  
  3. manager.addCache(cache);  


往cache中加入元素 

java代码:
  1. Element element = new Element("key1""value1");  
  2. cache.put(new Element(element);  

 

从cache中取得元素

 

java代码:
  1. Element element = cache.get("key1");   

 

 

所以大概步骤为: 
第一步:生成CacheManager对象 
第二步:生成Cache对象 
第三步:向Cache对象里添加由key,value组成的键值对的Element元素
 

具体一个Test.java程序: 

java代码:
查看复制到剪贴板打印package com.bcc.ctrl;

import java.util.HashMap;
import java.util.Map;

import net.sf.ehcache.Cache;  
import net.sf.ehcache.CacheManager;  
import net.sf.ehcache.Element;  
/**
 * 第一步:生成CacheManager对象
 * 第二步:生成Cache对象
 * 第三步:向Cache对象里添加由key,value组成的键值对的Element元素
 * @author David
 *
 */  
public class Test {  
      
    public static void main(String[] args) {  
          CacheManager singletonCacheManager = CacheManager.create();

          Cache linkCache = null;
          if (singletonCacheManager.cacheExists("LinkCache")) {
              // 如果存在直接获得.
              linkCache = singletonCacheManager
                      .getCache("LinkCache");
          } else {// 否则创建.
                  // 可以存5000个数据.60 * 1 设置1分钟缓存.
              linkCache = new Cache("LinkCache", 5000,
                      false, false, 60 * 1, 60 * 1);
              // 放入缓存.
              singletonCacheManager.addCache(linkCache);
          }
          
            
          //向linkCache对象里添加Element元素,Element元素有key,value键值对组成 ,都是Object类型
          linkCache.put(new Element("key1","key1:values1"));  
          Element element1 = linkCache.get("key1");         
          System.out.println(element1.getValue());
          
          Map<String,String> emailMap = new HashMap<String,String>();
          emailMap.put("username", "Tom");
          emailMap.put("time", "20130823");
          
          linkCache.put(new Element("key2",emailMap));
          Element element2 = linkCache.get("key2");  
          Map<String,String> map = (Map<String,String>)(element2.getValue()); //getValue得到的是Object类型
          System.out.println("username: " + map.get("username"));
          System.out.println("time: " + map.get("time"));
          
          
          //该例设置缓存为1分钟(60*1),测试1分钟后linkCache是否自动被清空
          try {
              Thread.sleep(70000);//括号里面的1000代表1000毫秒,也就是1秒,此处是70秒
          } catch (InterruptedException e) {
                  e.printStackTrace();
          }
          System.out.println("延迟70秒后,超过缓存设定存在时间,linkCache被清空:" + singletonCacheManager.cacheExists("LinkCache"));
          
          // 如果存在直接删除缓存
          if (singletonCacheManager.cacheExists("LinkCache")) {
              singletonCacheManager.removeCache("LinkCache");
          }
          
          //关闭CacheManager
          singletonCacheManager.shutdown();  
     }  
 
 
}

输出结果:
key1:values1
username: Tom
time: 20130823
延迟70秒后,超过缓存设定存在时间,linkCache被清空: true



3. 在 Hibernate 中运用EHCache ,详见Hibernate 之Hibernate缓存

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics