Implémenter un cache LRU
Vous développez une application Web qui récupère souvent des renseignements de profil utilisateur sous forme de chaînes. Pour améliorer la performance, vous voulez implémenter un petit cache qui stocke ces chaînes de profil et peut repérer quelles entrées ont été les moins utilisées récemment.
La classe CacheEntry a été préchargée pour vous.
Cette activité fait partie du cours
Optimiser le code en Java
Instructions de l’exercice
- Dans la méthode
get(), récupérez l'entréecachepour lakeyindiquée. - Après avoir récupéré la
key, mettez à jour son horodatage d'accès. - Après avoir ajouté une entrée dans le cache, si la capacité est dépassée, supprimez l'entrée la moins utilisée récemment.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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) {}
}