Maison  >  Article  >  Java  >  Comment implémenter une carte/un cache expirant en fonction du temps en Java ?

Comment implémenter une carte/un cache expirant en fonction du temps en Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-20 13:34:17357parcourir

How to Implement a Time-Based Expiring Map/Cache in Java?

Carte/cache Java basé sur le temps avec clés expirantes

Cette question recherche une implémentation Java qui expire automatiquement les entrées en fonction d'un délai d'expiration configurable. La solution privilégiée évite les références faibles, les fichiers de configuration externes et la mise en œuvre manuelle.

Réponse

La bibliothèque Guava fournit une solution avec sa classe MapMaker :

ConcurrentMap<Key, Graph> graphs = new MapMaker()
   .concurrencyLevel(4)
   .softKeys()
   .weakValues()
   .maximumSize(10000)
   .expiration(10, TimeUnit.MINUTES)
   .makeComputingMap(
       new Function<Key, Graph>() {
         public Graph apply(Key key) {
           return createExpensiveGraph(key);
         }
       });

Pour Guava version 10.0 et supérieure, utilisez CacheBuilder :

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
    .maximumSize(10000)
    .expireAfterWrite(10, TimeUnit.MINUTES)
    .build(
        new CacheLoader<Key, Graph>() {
          public Graph load(Key key) throws AnyException {
            return createExpensiveGraph(key);
          }
        });

Cette implémentation fournit une expiration automatique des clés, garantissant que les entrées sont supprimées après une période spécifiée.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn