一般是採用HashMap來作爲緩存的存儲結構,但Java沒有全局變量的概念,怎麼保證緩存中的數據不被垃圾回收器收集,而造成數據的丟失呢?
請問一般的緩存是怎樣保證數據的獨立性(即脫離垃圾回收器)的?
做一個判斷,HashMap取不到值就到數據庫裏再讀數據
系統第一次起來,或是第一次取數據後將數據
保存在一個static的Map裏即可,凡是緩存的東西
總是經常用到的,所以一般是保持強引用,GC應該
會清理
(1)jive裏面,是使用單態模式維護一個工廠實例,做爲程序的入口,就是無論有多少個在線用戶,都只要從該入口進入.在這個工廠實例中,有一個緩存管理類(DatabaseCacheManager)變量,這個類有幾個公有變量,如DbUserCache(就是緩存訪問過的用戶)等.當要獲取一個user的用戶信息時,它就會先在DbUserCache中查找,如果找不到,那麼就從數據庫中讀取,再放入緩存中.
[email protected](聯繫我)
singleton模式:
public class DataCache {
protected static final HashMap map = new HashMap(); // Cache table
private static final Object lock = new Object();
private DataCache() {} // 防止在外部實例化
public static Object getData(Object key) {
Object v = map.get(key);
if (v == null) {
synchronized(lock) {
v = map.get(key); // Check again to avoid re-load
if (v == null) loadDataSource(key);
v = map.get(key); // retrieves data.
}
}
return v;
}
/*
*Load data from data source.
*/
protected static synchronized void loadDataSource(Object key) {
Object value = new Object(); // Load value from data source
map.put(key, value);
}
}