webキャッシュ--Ehcache使用
キャッシュを使って遊びたいなら、自分で書いてもいいです.MyCacheクラスを書きます
Ehcacheの使用について.まずプロジェクトでjarパッケージを参照するべきです.行ってもいいですhttp://ehcache.org/downloads/catalog ダウンロードします.中の三つのjarカバンを導入します.私はehcache-2.11 0.0-distributions.tar.gzをダウンロードしました.その後、ehcache.xmlをプロジェクトのsrcディレクトリに導入すると、呼び出し時に直接にこの設定にロードすることができます.ehcache.xmlの内容を変更できます.まず、CacheManagerオブジェクトCacheManager cacheManager=new CacheManager()を作成します. その後Ehcacheインターフェースを取得し、Ehcache cache=cacheManager.getEhcache(cacheName)を通じて.cacheNameはehcache.xmlの中の属性nameの値です.必要に応じてラベルを追加できます. 取得値は、Elementオブジェクトを使用しています.
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);
}
}
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;
}
}