10 votes

Comment puis-je migrer un RedisCacheManager avec une expiration par défaut vers Spring Data Redis 2.0 ?

Je suis en train de mettre à jour un projet qui utilise Spring Data Redis vers la version 2.x. Auparavant, le gestionnaire de cache pouvait être configuré avec une expiration par défaut à l'aide de la commande RedisCacheManager.setDefaultExpiration(defaultExpireTime) . Cette option ne semble pas exister dans la version 2.x. Quel est l'équivalent dans la version 2.x ? Est-ce que c'est RedisCacheConfiguration.entryTtl(ttl) ou autre chose ?

Je suis probablement en train de rater quelque chose, mais je ne trouve pas de guide de migration vers Spring Data Redis 2.x. Un tel guide de migration existe-t-il ?

En bref, j'aimerais migrer le code suivant vers Redis 2.x :

public CacheManager cacheManager() {
    RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate());
    redisCacheManager.setDefaultExpiration(DEFAULT_EXPIRATION_SECONDS);
    return redisCacheManager;
}

public RedisTemplate<String, Object> redisTemplate() {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(redisConnectionFactory());
    return template;
}

Le texte suivant est-il équivalent ? Si non, quel serait le code équivalent dans Redis 2.x ?

public CacheManager cacheManager() {
    return RedisCacheManager.builder(redisConnectionFactory())
            .cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(DEFAULT_EXPIRATION_DURATION))
            .build();
}

9voto

Brian Lee Points 131

A l'origine, j'utilisais le code source et les dépendances suivants...

    @Bean(value ="redisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
    redisTemplate.setConnectionFactory(redisConnectionFactory);
    return redisTemplate;
}

@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate){
    RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
    cacheManager.setDefaultExpiration(resourceConfigValue.getCacheExpireSeconds());
    return cacheManager;
}

org.springframework.boot:spring-boot-starter-web:1.5.10.RELEASE

org.springframework.boot:spring-boot-starter-data-redis:1.5.10.RELEASE

J'ai confirmé que cette idée fonctionne comme prévu...

    @Bean(value ="redisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
    redisTemplate.setConnectionFactory(redisConnectionFactory);
    return redisTemplate;
}

@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
    Duration expiration = Duration.ofSeconds(resourceConfigValue.getCacheExpireSeconds());
    return RedisCacheManager.builder(redisConnectionFactory)
            .cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(expiration)).build();
}

org.springframework.boot:spring-boot-starter-web:2.0.2.RELEASE

org.springframework.boot:spring-boot-starter-data-redis:2.0.2.RELEASE

2voto

user11040344 Points 1

Mettre ceci dans application.yml

spring.cache.redis.time-to-live : 60s

remplacez 60 par DEFAULT_EXPIRATION_SECONDS

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X