SpringBoot Data Redis 哨兵模式配置

工作中碰到。现记录一下。

JDK1.8,SpringBoot 2.2.5

keywords:springboot data redis, Lettuce, Sentinel

根据官方文档

RedisSentinelConfiguration can also be defined with a PropertySource, which lets you set the following properties:

Configuration Properties

  • spring.redis.sentinel.master: name of the master node.

  • spring.redis.sentinel.nodes: Comma delimited list of host:port pairs.

  • spring.redis.sentinel.password: The password to apply when authenticating with Redis Sentinel

pom.xml


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


  org.apache.commons
  commons-pool2
  2.4.2

application.yml

spring:
  application: dev-8090.com
  redis:
    database: 3
    lettuce:
      pool:
        max-active: 100
        max-wait: 15000
        max-idle: 100
        min-idle: 50
    timeout: 15000
    sentinel:
      master: article_pool_master
      nodes: 172.16.111.130:26379,172.16.112.71:26379,172.16.113.125:26379

Config文件

redisProperties提供读取application.yml中的redis配置的方法 -> 手动读取

redisTemplate传入RedisConnectionFactory -> 自动注入,自动从application.yml配置

@Configuration
@EnableCaching
public class RedisConfig {

    @Autowired
    private RedisProperties redisProperties;

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){

          /* ========= 哨兵模式配置 ========= */
//        RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
//                .master(redisProperties.getSentinel().getMaster());
//        redisProperties.getSentinel().getNodes().forEach(s -> sentinelConfig.sentinel(s, Integer.valueOf(redisProperties.getPort())));
//        sentinelConfig.setDatabase(redisProperties.getDatabase());

          /* ========= 连接池通用配置 ========= */
 //       GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
 //       genericObjectPoolConfig.setMaxTotal(redisProperties.getLettuce().getPool().getMaxActive());
 //       genericObjectPoolConfig.setMinIdle(redisProperties.getLettuce().getPool().getMinIdle());
 //       genericObjectPoolConfig.setMaxIdle(redisProperties.getLettuce().getPool().getMaxIdle());
 //       genericObjectPoolConfig.setMaxWaitMillis(redisProperties.getLettuce().getPool().getMaxWait().getSeconds());

          /* ========= lettuce pool ========= */
//        LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder();
 //       builder.poolConfig(genericObjectPoolConfig);
 //       builder.commandTimeout(redisProperties.getTimeout());

          /* ========= 配置完connectionFactory========= */
 //       LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(sentinelConfig, builder.build());
//        connectionFactory.afterPropertiesSet();

        /* ========= 创建 template ========= */
        RedisTemplate template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);
        template.setEnableTransactionSupport(true);

        // 设置序列化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(
                Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        jackson2JsonRedisSerializer.setObjectMapper(om);

        // 设置序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        template.setKeySerializer(stringRedisSerializer);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashKeySerializer(stringRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);

        return template;
    }
}

 
  

Dao层

定义数据库操作

@Component
public class UploadRedisDao implements IUploadRedisDao {

    @Resource(name="redisTemplate")
    private RedisTemplate redisTemplate;

    @Override
    public String getUserToken(String key) {
        String userToken = redisTemplate.opsForValue().get(key);

        String transformedToken = StringEscapeUtils.unescapeJava(userToken);
//        System.out.println("userToken: "+transformedToken);
        return transformedToken;
    }

}

最后在service层调用Dao层定义的操作方法。

你可能感兴趣的:(工作)