首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

JAVA缓存的兑现

2013-06-26 
JAVA缓存的实现JAVA缓存的实现缓存可分为二大类:?一、通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘

JAVA缓存的实现

JAVA缓存的实现

缓存可分为二大类:?
一、通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式;??
二、内存缓存,也就是实现一个类中静态Map,对这个Map进行常规的增删查.?
下面为一个简单的缓存代码?

Java代码?

package?lhm.hcy.guge.frameset.cache;???

??

import?java.util.*;???

??

/**??

?*?<p>Title:?</p>??

?*??

?*?<p>Description:?管理缓存</p>??

?*?Deep?blue?2008-11-28?think??

?*?可扩展的功能:当chche到内存溢出时必须清除掉最早期的一些缓存对象,这就要求对每个缓存对象保存创建时间??

?*?<p>Copyright:?Copyright?(c)?2008</p>??

?*??

?*?<p>Company:?</p>??

?*??

?*?@author?Deepblue??2008-11-11??

?*?@version?1.0??

?*/??

public?class?CacheManager?{???

????private?static?HashMap?cacheMap?=?new?HashMap();???

??

????//单实例构造方法???

????private?CacheManager()?{???

????????super();???

????}???

????//获取布尔值的缓存???

????public?static?boolean?getSimpleFlag(String?key){???

????????try{???

????????????return?(Boolean)?cacheMap.get(key);???

????????}catch(NullPointerException?e){???

????????????return?false;???

????????}???

????}???

????public?static?long?getServerStartdt(String?key){???

????????try?{???

????????????return?(Long)cacheMap.get(key);???

????????}?catch?(Exception?ex)?{???

????????????return?0;???

????????}???

????}???

????//设置布尔值的缓存???

????public?synchronized?static?boolean?setSimpleFlag(String?key,boolean?flag){???

????????if?(flag?&&?getSimpleFlag(key))?{//假如为真不允许被覆盖???

????????????return?false;???

????????}else{???

????????????cacheMap.put(key,?flag);???

????????????return?true;???

????????}???

????}???

????public?synchronized?static?boolean?setSimpleFlag(String?key,long?serverbegrundt){???

????????if?(cacheMap.get(key)?==?null)?{???

????????????cacheMap.put(key,serverbegrundt);???

????????????return?true;???

????????}else{???

????????????return?false;???

????????}???

????}???

??

??

????//得到缓存。同步静态方法???

????private?synchronized?static?Cache?getCache(String?key)?{???

????????return?(Cache)?cacheMap.get(key);???

????}???

??

????//判断是否存在一个缓存???

????private?synchronized?static?boolean?hasCache(String?key)?{???

????????return?cacheMap.containsKey(key);???

????}???

??

????//清除所有缓存???

????public?synchronized?static?void?clearAll()?{???

????????cacheMap.clear();???

????}???

??

????//清除某一类特定缓存,通过遍历HASHMAP下的所有对象,来判断它的KEY与传入的TYPE是否匹配???

????public?synchronized?static?void?clearAll(String?type)?{???

????????Iterator?i?=?cacheMap.entrySet().iterator();???

????????String?key;???

????????ArrayList<String>?arr?=?new?ArrayList<String>();???

????????try?{???

????????????while?(i.hasNext())?{???

????????????????java.util.Map.Entry?entry?=?(java.util.Map.Entry)?i.next();???

????????????????key?=?(String)?entry.getKey();???

????????????????if?(key.startsWith(type))?{?//如果匹配则删除掉???

????????????????????arr.add(key);???

????????????????}???

????????????}???

????????????for?(int?k?=?0;?k?<?arr.size();?k++)?{???

????????????????clearOnly(arr.get(k));???

????????????}???

????????}?catch?(Exception?ex)?{???

????????????ex.printStackTrace();???

????????}???

????}???

??

????//清除指定的缓存???

????public?synchronized?static?void?clearOnly(String?key)?{???

????????cacheMap.remove(key);???

????}???

??

????//载入缓存???

????public?synchronized?static?void?putCache(String?key,?Cache?obj)?{???

????????cacheMap.put(key,?obj);???

????}???

??

????//获取缓存信息???

????public?static?Cache?getCacheInfo(String?key)?{???

??

????????if?(hasCache(key))?{???

????????????Cache?cache?=?getCache(key);???

????????????if?(cacheExpired(cache))?{?//调用判断是否终止方法???

????????????????cache.setExpired(true);???

????????????}???

????????????return?cache;???

????????}else??

????????????return?null;???

????}???

??

????//载入缓存信息???

????public?static?void?putCacheInfo(String?key,?Cache?obj,?long?dt,boolean?expired)?{???

????????Cache?cache?=?new?Cache();???

????????cache.setKey(key);???

????????cache.setTimeOut(dt?+?System.currentTimeMillis());?//设置多久后更新缓存???

????????cache.setValue(obj);???

????????cache.setExpired(expired);?//缓存默认载入时,终止状态为FALSE???

????????cacheMap.put(key,?cache);???

????}???

????//重写载入缓存信息方法???

????public?static?void?putCacheInfo(String?key,Cache?obj,long?dt){???

????????Cache?cache?=?new?Cache();???

????????cache.setKey(key);???

????????cache.setTimeOut(dt+System.currentTimeMillis());???

????????cache.setValue(obj);???

????????cache.setExpired(false);???

????????cacheMap.put(key,cache);???

????}???

??

????//判断缓存是否终止???

????public?static?boolean?cacheExpired(Cache?cache)?{???

????????if?(null?==?cache)?{?//传入的缓存不存在???

????????????return?false;???

????????}???

????????long?nowDt?=?System.currentTimeMillis();?//系统当前的毫秒数???

????????long?cacheDt?=?cache.getTimeOut();?//缓存内的过期毫秒数???

????????if?(cacheDt?<=?0||cacheDt>nowDt)?{?//过期时间小于等于零时,或者过期时间大于当前时间时,则为FALSE???

????????????return?false;???

????????}?else?{?//大于过期时间?即过期???

????????????return?true;???

????????}???

????}???

??

????//获取缓存中的大小???

????public?static?int?getCacheSize()?{???

????????return?cacheMap.size();???

????}???

??

????//获取指定的类型的大小???

????public?static?int?getCacheSize(String?type)?{???

????????int?k?=?0;???

????????Iterator?i?=?cacheMap.entrySet().iterator();???

????????String?key;???

????????try?{???

????????????while?(i.hasNext())?{???

????????????????java.util.Map.Entry?entry?=?(java.util.Map.Entry)?i.next();???

????????????????key?=?(String)?entry.getKey();???

????????????????if?(key.indexOf(type)?!=?-1)?{?//如果匹配则删除掉???

????????????????????k++;???

????????????????}???

????????????}???

????????}?catch?(Exception?ex)?{???

????????????ex.printStackTrace();???

????????}???

??

????????return?k;???

????}???

??

????//获取缓存对象中的所有键值名称???

????public?static?ArrayList<String>?getCacheAllkey()?{???

????????ArrayList?a?=?new?ArrayList();???

????????try?{???

????????????Iterator?i?=?cacheMap.entrySet().iterator();???

????????????while?(i.hasNext())?{???

????????????????java.util.Map.Entry?entry?=?(java.util.Map.Entry)?i.next();???

????????????????a.add((String)?entry.getKey());???

????????????}???

????????}?catch?(Exception?ex)?{}?finally?{???

????????????return?a;???

????????}???

????}???

??

????//获取缓存对象中指定类型?的键值名称???

????public?static?ArrayList<String>?getCacheListkey(String?type)?{???

????????ArrayList?a?=?new?ArrayList();???

????????String?key;???

????????try?{???

????????????Iterator?i?=?cacheMap.entrySet().iterator();???

????????????while?(i.hasNext())?{???

????????????????java.util.Map.Entry?entry?=?(java.util.Map.Entry)?i.next();???

????????????????key?=?(String)?entry.getKey();???

????????????????if?(key.indexOf(type)?!=?-1)?{???

????????????????????a.add(key);???

????????????????}???

????????????}???

????????}?catch?(Exception?ex)?{}?finally?{???

????????????return?a;???

????????}???

????}???

??

}???

??

??

package?lhm.hcy.guge.frameset.cache;???

??

/**??

?*?<p>Title:?</p>??

?*??

?*?<p>Description:?缓存DTO</p>??

?*??

?*?<p>Copyright:?Copyright?(c)?2008</p>??

?*??

?*?<p>Company:?</p>??

?*??

?*?@author?Deepblue??2008-11-11??

?*?@version?1.0??

?*/??

public?class?Cache?{???

????????private?String?key;//缓存ID???

????????private?Object?value;//缓存数据???

????????private?long?timeOut;//更新时间???

????????private?boolean?expired;?//是否终止???

????????public?Cache()?{???

????????????????super();???

????????}???

??

????????public?Cache(String?key,?Object?value,?long?timeOut,?boolean?expired)?{???

????????????????this.key?=?key;???

????????????????this.value?=?value;???

????????????????this.timeOut?=?timeOut;???

????????????????this.expired?=?expired;???

????????}???

??

????????public?String?getKey()?{???

????????????????return?key;???

????????}???

??

????????public?long?getTimeOut()?{???

????????????????return?timeOut;???

????????}???

??

????????public?Object?getValue()?{???

????????????????return?value;???

????????}???

??

????????public?void?setKey(String?string)?{???

????????????????key?=?string;???

????????}???

??

????????public?void?setTimeOut(long?l)?{???

????????????????timeOut?=?l;???

????????}???

??

????????public?void?setValue(Object?object)?{???

????????????????value?=?object;???

????????}???

??

????????public?boolean?isExpired()?{???

????????????????return?expired;???

????????}???

??

????????public?void?setExpired(boolean?b)?{???

????????????????expired?=?b;???

????????}???

}???

??

//测试类,???

class?Test?{???

????public?static?void?main(String[]?args)?{???

????????System.out.println(CacheManager.getSimpleFlag("alksd"));???

//????????CacheManager.putCache("abc",?new?Cache());???

//????????CacheManager.putCache("def",?new?Cache());???

//????????CacheManager.putCache("ccc",?new?Cache());???

//????????CacheManager.clearOnly("");???

//????????Cache?c?=?new?Cache();???

//????????for?(int?i?=?0;?i?<?10;?i++)?{???

//????????????CacheManager.putCache(""?+?i,?c);???

//????????}???

//????????CacheManager.putCache("aaaaaaaa",?c);???

//????????CacheManager.putCache("abchcy;alskd",?c);???

//????????CacheManager.putCache("cccccccc",?c);???

//????????CacheManager.putCache("abcoqiwhcy",?c);???

//????????System.out.println("删除前的大小:"+CacheManager.getCacheSize());???

//????????CacheManager.getCacheAllkey();???

//????????CacheManager.clearAll("aaaa");???

//????????System.out.println("删除后的大小:"+CacheManager.getCacheSize());???

//????????CacheManager.getCacheAllkey();???

??

??

????}???

}??

?

热点排行