Ако използвате Spring Data Redis, можете да използвате поддръжката на Spring за обработка на тези временни прекъсвания и изключения чрез персонализиран манипулатор на изключения.
Код:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Препоръчително е да зададете времето за изчакване по-ниско от стандартното (60 000):
spring.cache.type=redis
spring.redis.timeout=100
След това създайте персонализиран манипулатор на грешки в контекста на 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 трябва да открие неизправността след 100 милисекунди и резервно време, за да извлече данните, извлечени чрез @Cacheable
анотирани методи обикновено, сякаш има пропуск в кеша. И всеки път, когато кешът бъде възстановен, Spring ще започне да се изтегля от кеша отново.