生活随笔
收集整理的這篇文章主要介紹了
JAVA缓存的实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
轉(zhuǎn)載自??JAVA緩存的實(shí)現(xiàn)
緩存可分為二大類:?
一、通過文件緩存,顧名思義文件緩存是指把數(shù)據(jù)存儲(chǔ)在磁盤上,不管你是以XML格式,序列化文件DAT格式還是其它文件格式;??
二、內(nèi)存緩存,也就是實(shí)現(xiàn)一個(gè)類中靜態(tài)Map,對(duì)這個(gè)Map進(jìn)行常規(guī)的增刪查.?
下面為一個(gè)簡(jiǎn)單的緩存代碼?
package lhm.hcy.guge.frameset.cache;import java.util.*;/*** <p>Title: </p>** <p>Description: 管理緩存</p>* Deep blue 2008-11-28 think* 可擴(kuò)展的功能:當(dāng)chche到內(nèi)存溢出時(shí)必須清除掉最早期的一些緩存對(duì)象,這就要求對(duì)每個(gè)緩存對(duì)象保存創(chuàng)建時(shí)間* <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();//單實(shí)例構(gòu)造方法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;}}//設(shè)置布爾值的緩存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;}}//得到緩存。同步靜態(tài)方法private synchronized static Cache getCache(String key) {return (Cache) cacheMap.get(key);}//判斷是否存在一個(gè)緩存private synchronized static boolean hasCache(String key) {return cacheMap.containsKey(key);}//清除所有緩存public synchronized static void clearAll() {cacheMap.clear();}//清除某一類特定緩存,通過遍歷HASHMAP下的所有對(duì)象,來判斷它的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)) { //調(diào)用判斷是否終止方法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()); //設(shè)置多久后更新緩存cache.setValue(obj);cache.setExpired(expired); //緩存默認(rèn)載入時(shí),終止?fàn)顟B(tài)為FALSEcacheMap.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(); //系統(tǒng)當(dāng)前的毫秒數(shù)long cacheDt = cache.getTimeOut(); //緩存內(nèi)的過期毫秒數(shù)if (cacheDt <= 0||cacheDt>nowDt) { //過期時(shí)間小于等于零時(shí),或者過期時(shí)間大于當(dāng)前時(shí)間時(shí),則為FALSEreturn false;} else { //大于過期時(shí)間 即過期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;}//獲取緩存對(duì)象中的所有鍵值名稱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;}}//獲取緩存對(duì)象中指定類型 的鍵值名稱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;//緩存IDprivate Object value;//緩存數(shù)據(jù)private long timeOut;//更新時(shí)間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;}
}//測(cè)試類,
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();}
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的JAVA缓存的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。