0
重寫方法我書面方式實現的LRU緩存與LinkedHashMap
一類。通常我需要覆蓋的方法put
和get
以寫入到磁盤當一個對象被添加到緩存中,並從磁盤獲取該對象未在高速緩存中找到。的緩存實現
我LRUCache類的樣子:
public class LRUCache<K, V> extends LinkedHashMap<K, V>
implements Serializable {
/**
* File where the elements of the cache are stored
*/
private File cacheFile = null;
/**
* UID of the class for serialization.
*/
private static final long serialVersionUID = 1L;
/**
* Maximum number of entries in the cache.
*/
private final int maxEntries;
/**
* Default constructor of the cache.
*
* @param newMaxEntries
* the maximum number of entries in the cache.
*/
public LRUCache(final int newMaxEntries, String fileName) {
super(newMaxEntries + 1, 1.0f, true);
this.maxEntries = newMaxEntries;
this.cacheFile = new File(fileName);
}
@Override
public V get(Object key) {
V VObject = super.get(key);
if (VObject == null) {
// TODO: Fetch from disk
}
return VObject;
}
@Override
public V put(K key, V value) {
// TODO: Write to disk
return super.put(key, value);
}
@Override
protected final boolean
removeEldestEntry(final Map.Entry<K, V> eldest) {
return super.size() > maxEntries;
}
}
我的問題是我怎麼可以重寫這兩種方法來做到這一點的最快越好。高速緩存的對象是否實現了Externalize
是一個好主意?
感謝
除非必須,否則請不要重新發明輪子。使用Guava緩存支持。它重量輕,螺紋安全。 –
番石榴不會存儲比適合內存更多的數據。番石榴緩存是本地應用程序的一次運行,因此它們不會將數據存儲在文件中。 – synack
神聖的廢話我沒有看到'文件'。 **廢話不要這樣做!**你應該看看Ehcache(或者memcache或redis或者已經做過的無數事情)。嚴重不要編寫你自己的分佈式緩存。這不是一個簡單的問題,需要考慮大量的併發問題。 –