Springboot2.2 Redis複数インスタンスの簡単な手動構成

8352 ワード

Springbootを2.0にアップグレードした後、Redisの配置は2.0以前に比べて特に大きな変化があり、私もSpringboot 2を初めて学びました。0、间违ったところがあるに违いない。この投稿を読んだ友达に収获してほしい。本文のspringbootバージョンは2.2.0だ。BUILD-SNAPSHOT springboot 2.0以降、redisの配置が私に与える印象は主に2つの方式があり、1つはstandalone方式を使用すること、1つは伝統的なjedisに基づく配置、2つはLettuce方式を使用すること、nettyに基づく通信、springboot 2である。0の新しい方式は、lettuce方式を推奨し、ロットsetとdeleteのテスト(RedisTemplateのdelete法とopsForのset法を直接使用)を経て、後者の効率は前者より2倍程度高い。 本明細書では、standaloneまたはlettuce方式にかかわらずapacheのcommons-pool 2で提供されるGenericObjectPoolConfigインスタンスをredisの接続プールとして使用し、jedisPoolConfigの使用を放棄する。

pomでのRedisの構成には参照が必要です.


    org.springframework.boot
    spring-boot-starter-data-redis


    org.apache.commons
    commons-pool2

Spring application.yml:

のRedis インスタンスを で するため、poolとredia-a/b/cの とspringbootのauto-cofing の いに する があります。

spring:
  redis:
    lettuce:
      pool:
        MaxTotal: 50
        minIdle: 1
        maxWaitMillis: 5000
        maxIdle: 5
        testOnBorrow: true
        testOnReturn: true
        testWhileIdle: true
    redis-a:
      database: 0
      hostName: 192.168.0.88
      port: 6379
      timeout: 5000
    redis-b:
      database: 1
      hostName: ${spring.redis.redis-a.hostName}
      port: ${spring.redis.redis-a.port}
      timeout: ${spring.redis.redis-a.timeout}
    redis-c:
      database: 2
      hostName: ${spring.redis.redis-a.hostName}
      port: ${spring.redis.redis-a.port}
      timeout: ${spring.redis.redis-a.timeout}

standalone

standalone のredis インスタンスを し、redisのstandalone を する 、pomにjedisクライアントを で する があります。どうせ の はspring-boot-starter-data-redisというstarterのpomにjedisが されているのを ましたが、 のこのdemoではjedis importを していません。


    redis.clients
    jedis

 

RedisTemplate :


@Configuration
public class StandaloneRedisConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.redis.lettuce.pool")
    @Scope(value = "prototype")
    public GenericObjectPoolConfig redisPool(){
        return new GenericObjectPoolConfig();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.redis.redis-a")
    public RedisStandaloneConfiguration standaloneConfigurationA() {
        return new RedisStandaloneConfiguration();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.redis.redis-b")
    public RedisStandaloneConfiguration standaloneConfigurationB() {
        return  new RedisStandaloneConfiguration();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.redis.redis-c")
    public RedisStandaloneConfiguration standaloneConfigurationC() {
        return new RedisStandaloneConfiguration();
    }

    @Bean
    public JedisConnectionFactory standaloneFactoryA(){
        JedisClientConfiguration poolConfig = JedisClientConfiguration.builder().usePooling().poolConfig(redisPool()).build();
        return  new JedisConnectionFactory(standaloneConfigurationA(), poolConfig);
    }

    @Bean
    public JedisConnectionFactory standaloneFactoryB(){
        JedisClientConfiguration poolConfig = JedisClientConfiguration.builder().usePooling().poolConfig(redisPool()).build();
        return new JedisConnectionFactory(standaloneConfigurationB(), poolConfig);
    }

    @Bean
    public JedisConnectionFactory standaloneFactoryC(){
        JedisClientConfiguration poolConfig = JedisClientConfiguration.builder().usePooling().poolConfig(redisPool()).build();
        return new JedisConnectionFactory(standaloneConfigurationC(), poolConfig);
    }

    @Bean
    public RedisTemplate StringRedisTemplateA(){
        RedisTemplate template = getRedisTemplate();
        template.setConnectionFactory(standaloneFactoryA());
        return template;
    }

    @Bean
    public RedisTemplate StringRedisTemplateB(){
        RedisTemplate template = getRedisTemplate();
        template.setConnectionFactory(standaloneFactoryB());
        return template;
    }

    @Bean
    public RedisTemplate StringRedisTemplateC(){
        RedisTemplate template = getRedisTemplate();
        template.setConnectionFactory(standaloneFactoryC());
        return template;
    }

    private RedisTemplate getRedisTemplate(){
        RedisTemplate template = new RedisTemplate<>();
        template.setValueSerializer(new GenericFastJsonRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());
        return template;
    }
}

Lettuce

lettuce はpomにredisClientのパッケージを する はない

RedisTemplate :


@Configuration
public class LettuceRedisConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.redis.lettuce.pool")
    @Scope(value = "prototype")
    public GenericObjectPoolConfig redisPool(){
        return new GenericObjectPoolConfig();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.redis.redis-a")
    public RedisStandaloneConfiguration redisConfigA(){
        return new RedisStandaloneConfiguration();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.redis.redis-b")
    public RedisStandaloneConfiguration redisConfigB(){
        return new RedisStandaloneConfiguration();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.redis.redis-c")
    public RedisStandaloneConfiguration redisConfigC(){
        return new RedisStandaloneConfiguration();
    }

    @Bean
    @Primary
    public LettuceConnectionFactory factoryA(){
        GenericObjectPoolConfig config = config();
        LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder()
                .poolConfig(config).commandTimeout(Duration.ofMillis(config.getMaxWaitMillis())).build();
        return new LettuceConnectionFactory(redisConfigA(), clientConfiguration);
    }

    @Bean
    public LettuceConnectionFactory factoryB(){
        GenericObjectPoolConfig config = config();
        LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder()
                .poolConfig(config).commandTimeout(Duration.ofMillis(config.getMaxWaitMillis())).build();
        return new LettuceConnectionFactory(redisConfigB(), clientConfiguration);
    }

    @Bean
    public LettuceConnectionFactory factoryC(){
        GenericObjectPoolConfig config = config();
        LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder()
                .poolConfig(config).commandTimeout(Duration.ofMillis(config.getMaxWaitMillis())).build();
        return new LettuceConnectionFactory(redisConfigC(), clientConfiguration);
    }

    @Bean
    public StringRedisTemplate redisTemplateA(){
        StringRedisTemplate template = getRedisTemplate();
        template.setConnectionFactory(factoryA());
        return template;
    }

    @Bean
    public StringRedisTemplate redisTemplateB(){
        StringRedisTemplate template = getRedisTemplate();
        template.setConnectionFactory(factoryB());
        return template;
    }

    @Bean
    public StringRedisTemplate redisTemplateC(){
        StringRedisTemplate template = getRedisTemplate();
        template.setConnectionFactory(factoryC());
        return template;
    }

    private StringRedisTemplate getRedisTemplate(){
        StringRedisTemplate template = new StringRedisTemplate();
        template.setValueSerializer(new GenericFastJsonRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());
        return template;
    }
}