Spring @Cacheable 기본 TTL
저는 일반적으로 사용합니다.@Cacheable
각 캐시에 대해 특정 TTL(사용 가능한 시간)을 설정합니다.
최근에 다음을 사용하는 스프링 부트 앱을 상속받았습니다.@Cacheable
캐시 관리자와 ttl을 명시적으로 언급하지 않고 있습니다.저는 그것을 명시적으로 변경하겠습니다.
하지만 명시적인 내용이 없을 때는 기본값이 무엇인지 알 수 없습니다.
서류를 봤는데 아무것도 없었어요
Spring @Cacheable에 설정할 구성 가능한 옵션이 없습니다.TTL
캐시의 경우 다음과 같이 @CacheEvict 및 @Scheduled를 사용하여 빌드할 수 있습니다.
@CacheEvict(allEntries = true, cacheNames = { "cache_1", "cache_2" })
@Scheduled(fixedDelay = 30000)
public void cacheEvict() {
}
자세한 솔루션/설명은 @Cacheable – Spring에 대한 TTL 설정에서 확인할 수 있습니다.
스프링 부트를 통해 저는 다음과 같은 성공을 거둘 수 있었습니다.
먼저 추가해야 합니다.spring-boot-starter-data-redis
POM 파일의 아티팩트입니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
그런 다음 application.properties 파일에 필요한 다음 구성을 추가해야 합니다.
#------ Redis Properties -------------
spring.cache.type=redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.cache.redis.time-to-live=600000
설정할 속성은 다음과 같습니다.spring.cache.redis.time-to-live
(값은 밀리초 단위입니다. 이 경우 10분이 설정되었습니다.)이와 함께.@Cacheable
설정된 기본 TTL과 함께 작동합니다.
여기에 있는 핵심 Spring Framework 참조 가이드에서 설명한 바와 같이 TTL/TTI(만료) 및 퇴거 정책에 대해 봄은 매우 명확합니다.즉, "기본값"은 Spring Cache Abstraction을 통해 Spring Boot 앱과 함께 사용되는 기본 데이터 저장소(캐싱 공급자)에 전적으로 의존합니다.
Arpit의 솔루션은 여러 캐슁 공급자(데이터 저장소) 간에 전송 가능한 일반적인 해결 방법이지만 OVERFLOW_TO_DISK와 같이 만료/제거 시 수행할 작업의 종류와 같은 보다 구체적인 만료/제거 정책도 다루지 않습니다.또는 LOCAL_DESTROY 전용(하이 어베이러빌리티(존 기반일 수 있음), 분산 시나리오 등), 무효화 등.
일반적으로 UC에 따라 "모든" 항목을 삭제하는 것은 허용되지 않는 옵션이며, 이 기능이 공급업체마다 크게 다르기 때문에 Spring이 캐슁 공급업체에 이 책임을 위임하는 이유 중 하나입니다.
요약하자면...UC에 대한 요구 사항을 확실히 검토하고 적절한 캐싱 공급자를 UC와 일치하는 기능과 연결합니다.Spring은 Redis에서 Apache Geode/Pivotal GemFire, Hazelcast 등 다양한 캐슁 프로바이더를 지원하며, 이와 관련하여 각각 다른/유사한 기능을 제공합니다.
실제로 ttl을 정의하는 cacheManager를 확장하여 @schedule을 사용하는 것보다 더 나은 방법이 있습니다.다음은 예입니다.
@Configuration
public class CacheConfig extends CachingConfigurerSupport {
@Value( "${redis.hostname}" )
private String redisHostName;
@Value( "${redis.port}" )
private int redisPort;
@Value("#{${redis.ttl}}")
private int DEFAULT_TTL;
@Bean
public JedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();
redisConnectionFactory.setHostName(redisHostName);
redisConnectionFactory.setPort(redisPort);
return redisConnectionFactory;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(cf);
return redisTemplate;
}
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
cacheManager.setDefaultExpiration(DEFAULT_TTL);
return cacheManager;
}
}
폼 의존성:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
캐시는 기본적으로 만료되지 않습니다.만료 시간을 설정해야 하는 경우 아래 속성 키로 rediscache를 사용해야 합니다.값이 60000ms이면 캐시는 1분 후에 만료됩니다.
# Entry expiration. By default, the entries never expire.
spring.cache.redis.time-to-live=60000
언급URL : https://stackoverflow.com/questions/44202700/spring-cacheable-default-ttl
'programing' 카테고리의 다른 글
세션이 생성되지 않음:이 버전의 ChromeDriver는 셀레늄을 사용하는 ChromeDriver Chrome에서 Chrome 버전 74 오류만 지원합니다. (0) | 2023.07.04 |
---|---|
봄 부츠를 신은 카프카 스트림 (0) | 2023.07.04 |
데이터베이스에 계정에 대한 항목을 만들기 전에 이미지 업로드를 처리하는 방법은 무엇입니까? (0) | 2023.07.04 |
mongodump에 대한 디렉토리/폴더를 지정할 수 있습니까? (0) | 2023.07.04 |
Linux에서 ASP.NET MVC 구축: 모범 사례, 툴 및 놀라움 (0) | 2023.07.04 |