更合网站制作公司,wordpress仿哔哩哔哩,六安网站建设电话,微信推广小程序怎么做转载自 JAVA缓存的实现
缓存可分为二大类: 一、通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘上#xff0c;不管你是以XML格式#xff0c;序列化文件DAT格式还是其它文件格式#xff1b; 二、内存缓存#xff0c;也就是实现一个类中静态Map,对这个Map进行常规的增删…转载自 JAVA缓存的实现
缓存可分为二大类: 一、通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘上不管你是以XML格式序列化文件DAT格式还是其它文件格式 二、内存缓存也就是实现一个类中静态Map,对这个Map进行常规的增删查. 下面为一个简单的缓存代码
package lhm.hcy.guge.frameset.cache;import java.util.*;/*** pTitle: /p** pDescription: 管理缓存/p* Deep blue 2008-11-28 think* 可扩展的功能当chche到内存溢出时必须清除掉最早期的一些缓存对象这就要求对每个缓存对象保存创建时间* pCopyright: Copyright (c) 2008/p** pCompany: /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;ArrayListString arr new ArrayListString();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;}elsereturn 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); //缓存默认载入时终止状态为FALSEcacheMap.put(key, cache);}//重写载入缓存信息方法public static void putCacheInfo(String key,Cache obj,long dt){Cache cache new Cache();cache.setKey(key);cache.setTimeOut(dtSystem.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||cacheDtnowDt) { //过期时间小于等于零时,或者过期时间大于当前时间时则为FALSEreturn 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 ArrayListString 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 ArrayListString 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;/*** pTitle: /p** pDescription: 缓存DTO/p** pCopyright: Copyright (c) 2008/p** pCompany: /p** author Deepblue 2008-11-11* version 1.0*/
public class Cache {private String key;//缓存IDprivate 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();}
}