313 votes

Java temps-carte/cache à l'échéance de touches

Ne l'un de vous connais un Java Carte ou standard similaires banque de données qui élimine automatiquement les entrées après un délai d'attente? De préférence dans une bibliothèque open source qui est accessible via maven?

Je sais que des moyens à mettre en œuvre la fonctionnalité et moi-même ont fait à plusieurs reprises dans le passé, donc je ne demande pas de conseils à cet égard, mais pour les pointeurs pour une bonne implémentation de référence.

WeakReference basée sur des solutions comme WeakHashMap ne sont pas une option, parce que mes clés sont susceptibles d'être non-internés des cordes et je veux un délai configurable qui ne dépend pas de le garbage collector.

Ehcache est également une option que je ne voudrais pas compter sur parce qu'il a besoin externe des fichiers de configuration. Je suis à la recherche d'un code-seule solution.

369voto

Shervin Points 8675

Oui. Google Collections, ou de Goyave , comme il est nommé maintenant a quelque chose qui s'appelle Cartographe qui peut faire exactement cela.

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);
         }
       });

Mise à jour:

Comme de goyave 10.0 (publié le septembre 28, 2011) beaucoup de ces Cartographe méthodes ont été dépréciée en faveur de la nouvelle CacheBuilder:

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

30voto

frymock Points 11

Apache Commons a décorateur pour la Carte expire enties: PassiveExpiringMap C'est plus simple que les caches de la Goyave.

P. S. attention, il n'est pas synchronisé.

15voto

Özhan Düz Points 2879

ExpiringMap a les mêmes fonctionnalités que Google Goyave.

Map<String, Connection> map = ExpiringMap.builder()
  .expiration(30, TimeUnit.SECONDS)
  .build();

5voto

dty Points 11383

Découvrez Google Collections (maintenant appelé Goyave). Il a une carte qui peut timeout automatiquement les entrées.

3voto

Emil Points 5513

Google collections (goyave) a le Cartographe dans laquelle vous pouvez définir la limite de temps(pour la date d'expiration) et vous pouvez utiliser de soft ou de la faiblesse de la référence que vous choisissez à l'aide d'une méthode de fabrique de créer des instances de votre choix.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X