2017-10-02 6 views
1

Nous utilisons cache Spring pour Caching quelques éléments. Ainsi, chaque fois que l'utilisateur demande la même clé d'élément, il passe en cache et vérifie s'il est disponible ou non. S'il est disponible, il récupère du cache sinon il exécute la méthode. Mais avant tout cela, je veux implémenter une fonctionnalité de plus dans mon cache.Comment invalider une entrée à partir du cache de Spring en fonction de l'heure?

Condition: Sur une base horaire, mon cache de printemps vérifie, si un élément du cache existe depuis plus d'une heure, il le supprime.

J'ai cherché sur google mais je n'ai trouvé aucun lien satisfaisant. Quelqu'un peut-il m'aider ou me fournir un lien pour le même?

+0

Ce n'est pas un problème avec le printemps Cache, il est une option de configuration sur votre implémentation de cache. – chrylis

+0

@chrylis Je sais que ce n'est pas un problème. Mais je ne suis pas capable de comprendre comment faire ça. Pouvez-vous me fournir un lien utile? – vsr

+0

quel fournisseur de cache utilisez-vous? – dimitrisli

Répondre

1

Vous devez définir la durée de vie (TTL) de votre cache. Comment vous faites cela dépend de votre fournisseur de trésorerie. Un couple d'exemples peuvent être trouvés ici:

Can I set a TTL for @Cacheable

@EnableCaching 
@Configuration 
public class CacheConfiguration implements CachingConfigurer { 

    @Override 
    public CacheManager cacheManager() { 
     ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager() { 

      @Override 
      protected Cache createConcurrentMapCache(final String name) { 
       return new ConcurrentMapCache(name, 
        CacheBuilder.newBuilder().expireAfterWrite(30, TimeUnit.MINUTES).maximumSize(100).build().asMap(), false); 
      } 
     }; 

     return cacheManager; 
    } 

    @Override 
    public KeyGenerator keyGenerator() { 
     return new DefaultKeyGenerator(); 
    } 

} 
+0

Merci beaucoup mon pote. Donc, j'utilisais SImpleCacheManager et le réglage de ConcurrentMapCache à l'intérieur. Je mettais seulement le nom du cache dans le COncurrentMapCache avec le paramètre par défaut. Mais chaing au paramètre ci-dessus CacheBuilder.newBuilder(). ExpireAfterWrite (30, TimeUnit.MINUTES). fonctionne bien. – vsr