Redis
 sql >> Base de données >  >> NoSQL >> Redis

Désactiver redis lorsque de nombreux délais d'attente à l'aide de démarrage à ressort

Si vous utilisez Spring Data Redis, vous pouvez tirer parti de la prise en charge de Spring pour gérer ces interruptions et exceptions temporaires via un gestionnaire d'exceptions personnalisé.

Code :

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Il est recommandé de définir un délai d'attente inférieur à la valeur par défaut (60 000) :

spring.cache.type=redis
spring.redis.timeout=100

Créez ensuite un gestionnaire d'erreurs personnalisé dans le contexte Spring :

import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.Cache;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.CacheErrorHandler;
import org.springframework.context.annotation.Configuration;

@Slf4j
@EnableCaching
@Configuration
public class CacheConfiguration extends CachingConfigurerSupport {

    @Override
    public CacheErrorHandler errorHandler() {
        return new CacheErrorHandler() {
            @Override
            public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) {
                log.info("Failure getting from cache: " + cache.getName() + ", exception: " + exception.toString());
            }

            @Override
            public void handleCachePutError(RuntimeException exception, Cache cache, Object key, Object value) {
                log.info("Failure putting into cache: " + cache.getName() + ", exception: " + exception.toString());
            }

            @Override
            public void handleCacheEvictError(RuntimeException exception, Cache cache, Object key) {
                log.info("Failure evicting from cache: " + cache.getName() + ", exception: " + exception.toString());
            }

            @Override
            public void handleCacheClearError(RuntimeException exception, Cache cache) {
                log.info("Failure clearing cache: " + cache.getName() + ", exception: " + exception.toString());
            }
        };
    }

}

Spring devrait détecter l'échec après 100 millisecondes et se replier pour récupérer les données récupérées via @Cacheable méthodes annotées normalement comme s'il y avait un manque de cache. Et chaque fois que le cache est restauré, Spring recommence à extraire du cache.