sql >> Databasteknik >  >> NoSQL >> Redis

Inaktivera redis vid många timeouts med fjäderstart

Om du använder Spring Data Redis kan du utnyttja Springs stöd för att hantera dessa tillfälliga avbrott och undantag via en anpassad undantagshanterare.

Kod:

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

Rekommenderar att ställa in timeout lägre än standardvärdet (60000):

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

Skapa sedan en anpassad felhanterare i Spring-sammanhang:

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 bör upptäcka felet efter 100 millisekunder och fallback för att hämta data som hämtats via @Cacheable annoterade metoder normalt som om det fanns en cache-miss. Och varje gång cachen återställs kommer våren att börja dra från cachen igen.




  1. Hur får man alla nycklar som matchar ett specifikt mönster från en hash i redis?

  2. Hur ställer jag in lösenordet för Redis?

  3. HBase BlockCache 101

  4. Hur man använder Redis med Python