CommencezCommencez gratuitement

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

Voir le cours

Instructions de l’exercice

  • Dans la méthode get(), récupérez l'entrée cache pour la key indiqué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) {}
}
Modifier et exécuter le code