Maison >Java >javaDidacticiel >Comment implémenter un cache LRU en Java : LinkedHashMap vs ConcurrentHashMap ?
Développement d'un cache LRU en Java
Dans ce contexte, un cache LRU (Least Récemment utilisé) fait l'hypothèse que le cache le moins récemment utilisé les entrées ont moins de valeur et peuvent être supprimées si nécessaire pour maintenir la capacité du cache. Pour y parvenir en Java, considérons les approches suivantes :
1. LinkedHashMap avec synchronisation
Vous avez mentionné l'utilisation de LinkedHashMap avec Collections#synchronizedMap. Il s'agit d'une approche valable, utilisant la structure de liste à double lien intégrée de LinkedHashMap pour maintenir le comportement LRU, avec une synchronisation protégeant le cache dans un environnement multithread.
2. Collections simultanées
Bien que les nouvelles collections simultanées offrent des performances améliorées, elles ne disposent pas de la fonctionnalité LRU intégrée. Par conséquent, étendre ConcurrentHashMap, en incorporant la logique de LinkedHashMap, pourrait fournir une implémentation LRU hautement concurrente.
Implémentation actuelle
Après avoir examiné les suggestions, vous avez opté pour l'approche LinkedHashMap Collections.synchronizedMap pour l'instant. En réexaminant cela à l'avenir, étendre ConcurrentHashMap pourrait être une option viable.
Voici un extrait de votre implémentation actuelle pour référence :
<code class="java">private class LruCache<A, B> extends LinkedHashMap<A, B> { private final int maxEntries; public LruCache(final int maxEntries) { super(maxEntries + 1, 1.0f, true); this.maxEntries = maxEntries; } // Check if the cache exceeds its maximum size @Override protected boolean removeEldestEntry(final Map.Entry<A, B> eldest) { return super.size() > maxEntries; } } Map<String, String> example = Collections.synchronizedMap(new LruCache<String, String>(CACHE_SIZE));</code>
Ce cache utilise la méthode removeEldestEntry pour supprimer le moins entrée récemment utilisée lorsque le cache atteint sa taille maximale, en conservant le comportement LRU.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!