java cacheutil_Java 常用缓存Cache机制的实现
所謂緩存,就是將程序或系統經常要調用的對象存在內存中,一遍其使用時可以快速調用,不必再去創建新的重復的實例。這樣做可以減少系統開銷,提高系統效率。
緩存主要可分為二大類:一、通過文件緩存,顧名思義文件緩存是指把數據存儲在磁盤上,不管你是以XML格式,序列化文件DAT格式還是其它文件格式;
二、內存緩存,也就是實現一個類中靜態Map,對這個Map進行常規的增刪查.
代碼如下 :package?lhm.hcy.guge.frameset.cache;
import?java.util.*;
//Description:?管理緩存
//可擴展的功能:當chche到內存溢出時必須清除掉最早期的一些緩存對象,這就要求對每個緩存對象保存創建時間
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?arr?=?new?ArrayList();
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?
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?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?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;
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?
//????????????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();
}
}
總結
以上是生活随笔為你收集整理的java cacheutil_Java 常用缓存Cache机制的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: t+0交易是什么意思
- 下一篇: 建行信用卡分期利息