当前位置: 首页 > 工具软件 > Ehcache Web > 使用案例 >

web缓存--Ehcache使用

聂和宜
2023-12-01

如果想使用缓存玩玩,也可以自己写个,就是用map集合。
写个MyCache类

package com.xingguo.util;

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

public class MyCache {

    private MyCache(){}

    private static Map<String,Object> cache = new HashMap<String, Object>();

    //存入缓存
    public static void put(String key,Object value){
        cache.put(key, value);
    }

    //获取缓存
    public static Object get(String key){
        return cache.get(key);
    }

    //删除缓存
    public static void remove(String key){
        cache.remove(key);
    }

}

在DAO中调用

package com.xingguo.dao;

import com.xingguo.db.DBHelp;
import com.xingguo.db.rowmapper.BeanPropertyRowMapper;
import com.xingguo.entity.AlarmPerceivedSeverity;
import com.xingguo.util.MyCache;

public class AlarmPerDao {
    private static DBHelp db = new DBHelp();
    public AlarmPerceivedSeverity findById(Integer id){
        AlarmPerceivedSeverity alarm = null;
        Object obj = MyCache.get("alarm:"+id);
        if(obj != null){
            alarm = (AlarmPerceivedSeverity) obj;
        }else{
            String sql = "select * from alarm_perceivedseverity where id= ";
            alarm = db.queryForObject(sql, new BeanPropertyRowMapper<AlarmPerceivedSeverity>(AlarmPerceivedSeverity.class));
            MyCache.put("alarm:"+id, alarm);
        }
        return alarm;
    }
}

这里面不用关心调用的DBHelp,这只是执行sql。其他的jdbc也可以。主要是调用MyCache中的put和get。在程序中如果有删除表数据,应该调用MyCache.remove()。

关于Ehcache的使用。首先应该在项目用引用它的jar包。可以去http://ehcache.org/downloads/catalog 下载。把里面的3个jar包导入进去。我下载的是ehcache-2.10.0-distribution.tar.gz。
然后把ehcache.xml导入项目的src目录下,这样在调用时可以直接加载到该配置。可以修改ehcache.xml中的内容:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
    <diskStore path="java.io.tmpdir"/>

    <cache name="alarmPerceivedSeverity"
           maxElementsInMemory="1000" <!-- 内存中最大缓存对象数 -->
           eternal="false" <!-- 是否持久化,如果为true下面的将不起作用 -->
           diskSpoolBufferSizeMB="20"<!-- 磁盘缓存的缓存区大小 -->
           timeToIdleSeconds="300"<!-- 允许闲置时间 -->
           timeToLiveSeconds="600"<!-- 允许存活时间,单位是秒 -->
           memoryStoreEvictionPolicy="LRU"<!-- 根据指定的策略去清理内存 -->
           overflowToDisk="true">
    </cache>

</ehcache>

然后写个Ehcache的类。

package com.xingguo.util;

import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;


public class EhCacheUtil {

    private EhCacheUtil(){};

    private static CacheManager cacheManager = new CacheManager();

    public static void put(String cacheName,Object key,Object value){

        Ehcache cache = cacheManager.getEhcache(cacheName);
        Element element = new Element(key,value);
        cache.put(element);
    }

    public static Object get(String cacheName,Object key){
        Ehcache cache = cacheManager.getEhcache(cacheName);
        Element element = cache.get(key);
        if(element != null){
            return element.getObjectValue();
        }else{
            return null;
        }
    }

    public static void remove(String cacheName,Object key){
        Ehcache cache = cacheManager.getEhcache(cacheName);
        Element element = cache.get(key);
        cache.remove(element);
    }
}
  • 先创建CacheManager对象CacheManager cacheManager = new CacheManager();
  • 然后获取Ehcache接口,通过Ehcache cache = cacheManager.getEhcache(cacheName);其中cacheName是ehcache.xml中属性name的值。可以根据需要多加个标签。
  • 获取值是使用Element对象。
package com.xingguo.dao;

import com.xingguo.db.DBHelp;
import com.xingguo.db.rowmapper.BeanPropertyRowMapper;
import com.xingguo.entity.AlarmPerceivedSeverity;
import com.xingguo.util.EhCacheUtil;


public class AlarmPerDao {

    private static DBHelp db = new DBHelp();
    public AlarmPerceivedSeverity findById(Integer id){
        AlarmPerceivedSeverity alarm = null;
        Object obj = EhCacheUtil.get("alarmPerceivedSeverity", "alarm:"+id);
        if(obj != null){
            alarm = (AlarmPerceivedSeverity) obj;
        }else{
            String sql = "select * from alarm_perceivedseverity where id= ";
            alarm = db.queryForObject(sql, new BeanPropertyRowMapper<AlarmPerceivedSeverity>(AlarmPerceivedSeverity.class));
            EhCacheUtil.put("alarmPerceivedSeverity","alarm:"+id, alarm);
        }
        return alarm;
    }

}
 类似资料: