CommencerCommencer gratuitement

Implémenter un cache LRU

Vous développez une application web qui récupère fréquemment des informations de profil utilisateur sous forme de chaînes. Pour améliorer les performances, vous souhaitez implémenter un cache simple qui stocke ces chaînes de profils et peut identifier les entrées les moins récemment utilisées.

La classe CacheEntry a été préchargée pour vous.

Cet exercice fait partie du cours

Optimiser son code en Java

Afficher le cours

Instructions

  • Dans la méthode get(), récupérez l’entrée cache correspondant à la key spécifiée.
  • Après avoir récupéré la key, mettez à jour son heure d’accès.
  • Après avoir ajouté une entrée au cache, si la capacité est dépassée, supprimez l’entrée la moins récemment utilisée.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

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