webキャッシュ--Ehcache使用


キャッシュを使って遊びたいなら、自分で書いてもいいです.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 ダウンロードします.中の三つのjarカバンを導入します.私はehcache-2.11 0.0-distributions.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;
        }
    
    }