Configuration du pool de connexions Lettuce pour Redis Cluster dans Spring Boot

Ajout des dépendences nécessaires

Pour intégrer Redis à Spring Boot avec le pool de connexions Lettuce, incluez ces dépendances dans votre fichier pom.xml.


<!-- Dépendance Spring Data Redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Dépendance pour le pool de connexions -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

Paramétrage des propriétés Redis

Configurez les paramètres Redis dans le fichier application.yml. Voici des exemples pour le déploiement standalone et en cluster.

Version satndalone


spring:
  redis:
    host: 192.168.40.156
    port: 6379
    password: 123456  # Laissez vide si aucune authentification
    lettuce:
      pool:
        max-active: 8   # Connexions actives maximales
        max-idle: 8     # Connexions inactives maximales
        min-idle: 0     # Connexions inactives minimales
        max-wait: -1ms  # Temps d'attente maximal (-1 pour illimité)

Version cluster


spring:
  redis:
    timeout: 6000ms
    database: 0
    cluster:
      nodes:
        - 192.168.40.156:7001
        - 192.168.40.156:7002
        - 192.168.40.157:7003
        - 192.168.40.157:7004
        - 192.168.40.158:7005
        - 192.168.40.158:7006
      max-redirects: 3  # Redirections maximales en cas d'échec
    lettuce:
      pool:
        max-active: 1000  # Capacité maximale du pool
        max-idle: 10      # Connexions inactives maximales
        min-idle: 5       # Connexions inactives minimales
        max-wait: -1ms    # Temps d'attente maximal

Définition de la classe de configuration

Créez une classe Java pour personnaliser le RedisTemplate et gérer le cache, avec une sérialisation JSON adaptée.


import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import javax.annotation.Resource;
import java.util.HashSet;
import java.util.Set;

@Configuration
@EnableCaching
public class ConfigRedis {

    @Resource
    private LettuceConnectionFactory usineConnexion;

    @Bean
    public KeyGenerator createurCles() {
        return (objetCible, methode, parametres) -> {
            StringBuilder cle = new StringBuilder();
            cle.append(objetCible.getClass().getName());
            cle.append(methode.getName());
            for (Object param : parametres) {
                cle.append(param.toString());
            }
            return cle.toString();
        };
    }

    @Bean
    public RedisCacheManager managerCache() {
        RedisCacheManager.RedisCacheManagerBuilder constructeur =
                RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(usineConnexion);
        Set<string> nomsCache = new HashSet<>();
        nomsCache.add("cacheDonnees");
        constructeur.initialCacheNames(nomsCache);
        return constructeur.build();
    }

    @Bean
    public RedisTemplate<String, Object> templateRedis(LettuceConnectionFactory connexion) {
        GenericJackson2JsonRedisSerializer serialiseurJson = new GenericJackson2JsonRedisSerializer();
        StringRedisSerializer serialiseurTexte = new StringRedisSerializer();

        RedisTemplate<String, Object> modele = new RedisTemplate<>();
        modele.setConnectionFactory(connexion);
        modele.setKeySerializer(serialiseurTexte);
        modele.setValueSerializer(serialiseurJson);
        modele.setHashKeySerializer(serialiseurTexte);
        modele.setHashValueSerializer(serialiseurJson);
        modele.afterPropertiesSet();
        return modele;
    }
}
</string>

Cette configuration établit une cnonexion optimisée à Redis via Lettuce, avec des sérialiseurs JSON pour les valeurs et de texte pour les clés, facilitant l'intégration dans les applications Spring Boot.

Étiquettes: Spring Boot Redis Lettuce Redis Cluster connection-pool

Publié le 12 juillet à 06h27