J'essaie la @Cacheable
prise en charge des annotations pour Spring 3.1 et je me demande s'il existe un moyen de supprimer les données en cache après un certain temps en définissant un TTL? À l'heure actuelle, d'après ce que je peux voir, je dois le nettoyer moi-même en utilisant le @CacheEvict
, et en l'utilisant avec @Scheduled
je peux faire moi-même une implémentation TTL, mais cela semble un peu trop pour une tâche aussi simple?
101
Voici un exemple complet de configuration de Guava Cache au printemps. J'ai utilisé Guava plutôt qu'Ehcache car il est un peu plus léger et la configuration me paraissait plus simple.
Importer les dépendances Maven
Ajoutez ces dépendances à votre fichier maven pom et exécutez clean and packages. Ces fichiers sont les méthodes d'assistance Guava dep et Spring à utiliser dans CacheBuilder.
Configurer le cache
Vous devez créer un fichier CacheConfig pour configurer le cache à l'aide de Java config.
Annoter la méthode à mettre en cache
Ajoutez l'annotation @Cacheable et transmettez le nom du cache.
Vous pouvez voir un exemple plus complet ici avec des captures d'écran annotées: Guava Cache in Spring
la source
J'utilise le piratage de la vie comme ça
la source
reportCacheEvict
méthode de n'importe où. Comment se passe le cacheEvict ??Springboot 1.3.8
et
la source
cela peut être fait en étendant org.springframework.cache.interceptor.CacheInterceptor et en surchargeant la méthode "doPut" - org.springframework.cache.interceptor.AbstractCacheInvoker votre logique de remplacement doit utiliser la méthode put du fournisseur de cache qui sait définir TTL pour l'entrée de cache (dans mon cas, j'utilise HazelcastCacheManager)
sur votre configuration de cache, vous devez ajouter ces 2 méthodes de bean, en créant votre instance d'intercepteur personnalisée.
Cette solution est bonne lorsque vous souhaitez définir le TTL au niveau d'entrée, et non globalement au niveau du cache
la source
Depuis Spring-boot 1.3.3, vous pouvez définir le délai d'expiration dans CacheManager en utilisant RedisCacheManager.setExpires ou RedisCacheManager.setDefaultExpiration dans le bean de rappel CacheManagerCustomizer .
la source
Lors de l'utilisation de Redis, TTL peut être défini dans le fichier de propriétés comme ceci:
spring.cache.redis.time-to-live=1d # 1 day
spring.cache.redis.time-to-live=5m # 5 minutes
spring.cache.redis.time-to-live=10s # 10 seconds
la source
Si vous travaillez avec redis et Java 8, vous pouvez jeter un œil à JetCache :
@Cached(expire = 10, timeUnit = TimeUnit.MINUTES) User getUserById(long userId);
la source