Een LRU-cache implementeren
Je ontwikkelt een webapplicatie die vaak gebruikersprofielinformatie als strings ophaalt. Om de prestaties te verbeteren, wil je een eenvoudige cache implementeren die deze profiel-strings opslaat en kan bijhouden welke items het minst recent zijn gebruikt.
De klasse CacheEntry is alvast voor je geladen.
Deze oefening maakt deel uit van de cursus
Code optimaliseren in Java
Oefeninstructies
- Haal in de methode
get()hetcache-item op voor de opgegevenkey. - Werk na het ophalen van de
keyde toegangstijd bij. - Als na het toevoegen van een item in de cache de capaciteit is overschreden, verwijder dan het minst recent gebruikte item.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
public class StringCache {
private final int capacity = 100;
private final Map cache = new HashMap<>();
public String get(String key) {
// Get the entry for the specified key
CacheEntry entry = ____.get(____);
if (entry == null) return null;
// Update its access time
entry.____();
return entry.value;
}
public void put(String key, String value) {
cache.put(key, new CacheEntry(value));
if (cache.size() > capacity) {
// If capacity exceeded, remove least recently used
____();
}
}
void removeLeastRecentlyUsed() {
String lruKey = null;
long oldest = Long.MAX_VALUE;
for (Map.Entry e : cache.entrySet()) {
if (e.getValue().lastAccessed < oldest) {
oldest = e.getValue().lastAccessed;
lruKey = e.getKey();
}
}
if (lruKey != null) { cache.remove(lruKey); }
}
public static void main(String[] args) {}
}