import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.reflect.Field;
import java.util.Hashtable;
/**
* 簡單的緩存工具
*
* @param <K> 緩存對象的主鍵
* @param <V> 緩存實例
*/
public class DataCache<K, V> {
private volatile static DataCache dataCache;
private Hashtable<K, DataReference> dataReferenceMap;
private ReferenceQueue<V> dataQueue;
private DataCache() {
dataReferenceMap = new Hashtable();
dataQueue = new ReferenceQueue();
}
private class DataReference extends SoftReference<V> {
private K key;
public DataReference(V data, String primaryKey) throws Exception {
super(data, dataQueue);
try {
Field field = data.getClass().getDeclaredField(primaryKey);
field.setAccessible(true);
key = (K) field.get(data);
}catch (Exception e){
throw e;
}
}
}
public static DataCache createCache() {
if (dataCache == null) {
synchronized (DataCache.class) {
if(dataCache == null){
dataCache = new DataCache();
}
}
}
return dataCache;
}
/**
* 向緩存中添加數(shù)據(jù)
*
* @param data 待緩存的實例
* @param primaryKeyName 實例對應數(shù)據(jù)庫中的主鍵
*/
public void setCacheValue(V data, String primaryKeyName) throws Exception {
cleanCache();
DataReference dataReference = new DataReference(data, primaryKeyName);
dataReferenceMap.put(dataReference.key, dataReference);
}
/**
* 從緩存中取數(shù)據(jù)
*
* @return
*/
public V getCacheValue(K primaryKeyValue) {
V data = null;
if(dataReferenceMap.containsKey(primaryKeyValue)){
data = dataReferenceMap.get(primaryKeyValue).get();
}
return data;
}
private void cleanCache() {
DataReference ref = null;
while ((ref = (DataReference) dataQueue.poll()) != null) {
dataReferenceMap.remove(ref.key);
}
}
public void clearAll() {
cleanCache();
dataReferenceMap.clear();
System.gc();
System.runFinalization();
}
}
實現(xiàn)一個高速緩存
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來全跨,“玉大人缝左,你說我怎么就攤上這事∨ㄈ簦” “怎么了渺杉?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長挪钓。 經(jīng)常有香客問我是越,道長,這世上最難降的妖魔是什么碌上? 我笑而不...
- 正文 為了忘掉前任倚评,我火速辦了婚禮,結(jié)果婚禮上绍赛,老公的妹妹穿的比我還像新娘蔓纠。我一直安慰自己辑畦,他們只是感情好吗蚌,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纯出,像睡著了一般蚯妇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暂筝,一...
- 文/蒼蘭香墨 我猛地睜開眼拄衰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了饵骨?” 一聲冷哼從身側(cè)響起翘悉,我...
- 正文 年R本政府宣布竭翠,位于F島的核電站振坚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏斋扰。R本人自食惡果不足惜渡八,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望传货。 院中可真熱鬧屎鳍,春花似錦、人聲如沸问裕。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽粮宛。三九已至窥淆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間巍杈,已是汗流浹背忧饭。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 奧格威伺通,一個傳奇的人物箍土,在自己變成“黃金樹”的時候,也不忘分享迅速功成名就的方法罐监,在觀察自己雇員14年后總結(jié)出一套...
- 從一定角度上說吴藻,我也算是個數(shù)碼愛好者。喜歡下載各類新鮮的軟件弓柱,體驗它們的新功能沟堡。 但說實話,打動自己的不多矢空。 畢竟...