0

want to configure this redis-context.xml file into .java class and it should take single string of comma separated list of IPs.

<bean id="jedisConnFactory"
      class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<constructor-arg name="sentinelConfig" ref="redisSentinelConfiguration"/>
    <property name="password" value="${redis.password}" />
    <property name="database" value="${redis.index}"/>
</bean>

<bean id="redisSentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
    <constructor-arg name="master" value="${redis.master.name}"/>
    <constructor-arg name="sentinelHostAndPorts">
        <set>
            <value>${redis.host1}:${redis.sentinel.port1}</value>
            <value>${redis.host2}:${redis.sentinel.port2}</value>
            <value>${redis.host3}:${redis.sentinel.port3}</value>
        </set>
    </constructor-arg>
</bean>

<bean id="redisJSONSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>

<!-- redis template definition -->
<bean id="redisTemplate"
      class="org.springframework.data.redis.core.RedisTemplate"
      p:connectionFactory-ref="jedisConnFactory"
      p:valueSerializer-ref="redisJSONSerializer"/>
Dev Garg
  • 1
  • 2

1 Answers1

0

You can use something like this:

@Configuration
@EnableCaching
public class RedisConfiguration {

  @Value("${redis.hostname}")
  private String redisHostName;

  @Value("${redis.port}")
  private int redisPort;

  List<String> clusterNodes =
      Arrays.asList(
          "node1:6379",
          "node2:6379",
          "node3:6379");

  @Bean
  RedisConnectionFactory connectionFactory() {
    return new JedisConnectionFactory(new RedisClusterConfiguration(clusterNodes));
  }

  @Bean(value = "redisTemplate")
  public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
    template.setKeySerializer(new StringRedisSerializer());
    template.setHashKeySerializer(new StringRedisSerializer());
    template.setConnectionFactory(factory);
    return template;
  }

  @Primary
  @Bean(name = "cacheManager1Hr") // Default cache manager is 1 hr
  public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
    Duration expiration = Duration.ofHours(1);
    RedisCacheManager redisCacheManager =
        RedisCacheManager.builder(redisConnectionFactory)
            .cacheDefaults(
                RedisCacheConfiguration.defaultCacheConfig()
                    .disableCachingNullValues()
                    .serializeValuesWith(
                        RedisSerializationContext.SerializationPair.fromSerializer(
                            new GenericJackson2JsonRedisSerializer()))
                    .entryTtl(expiration))
            .build();

    redisCacheManager.setTransactionAware(false);
    return redisCacheManager;
  }
}

maven dependency:

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
    </dependency>

You will find the sample code in this URL: https://github.com/olein/Java-AWS-RnD/blob/elasti-cache/src/main/java/com/rnd/aws/elasticache/RedisConfiguration.java

Fahim Fahad
  • 61
  • 1
  • 2
  • 4