0
votes

I was using Spring data Redis version 1.4.4 earlier. Since I had to configure Read timeout also in addition to connection timeout, I've upgraded the version to 2.1.6. But now I'm unable to create Rediscachemanager instance with RedisTemplate since it's deprecated from spring data redis version 2.0. Can someone please help with a way to achieve below similar config (Key/Value serialization with RedisTemplate) with upgraded version.

final JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();
redisConnectionFactory.setHostName(redisHost);      
redisConnectionFactory.setTimeout(10000);
redisConnectionFactory.setPort(port);
redisConnectionFactory.setUsePool(true);
redisConnectionFactory.afterPropertiesSet();

@Bean(name = "redisCacheManager")
    public CacheManager cacheManager(final RedisTemplate<String,Object> redisTemplate) {
        final RedisCacheManager manager = new RedisCacheManager(redisTemplate());
        manager.setDefaultExpiration(Long.parseLong(expiryInSecs));
        return manager;
    }

    @Bean(name="redisTemplate")
    public RedisTemplate<String, Object> redisTemplate() {
        final RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        redisTemplate.setKeySerializer(stringRedisSerializer());
        redisTemplate.setHashKeySerializer(stringRedisSerializer());
        redisTemplate.setValueSerializer(stringRedisSerializer());
        redisTemplate.setHashValueSerializer(stringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
1

1 Answers

0
votes

If you include Spring Data Redis and Lettuce as the driver (which I'd recommend), here's the configuration you'd need:

  @Bean
  public RedisConnectionFactory connectionFactory() {
    LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
        .commandTimeout(Duration.ofSeconds(2))
        .shutdownTimeout(Duration.ZERO)
        .build();

    return new LettuceConnectionFactory(new RedisStandaloneConfiguration("localhost", 6379), clientConfig);
  }

  @Bean(name = "redisCacheManager")
  public CacheManager cacheManager(final RedisConnectionFactory factory) {
    Duration expiration = Duration.ofSeconds(12345);

    RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager
        .builder(factory)
        .cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(expiration));


    return builder.build();
  }

  @Bean(name="redisTemplate")
  public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
    redisTemplate.setConnectionFactory(factory);
    redisTemplate.setKeySerializer(stringRedisSerializer());
    redisTemplate.setHashKeySerializer(stringRedisSerializer());
    redisTemplate.setValueSerializer(stringRedisSerializer());
    redisTemplate.setHashValueSerializer(stringRedisSerializer());
    return redisTemplate;
  }