java连接redis哨兵_java练习生 - 使用redis(哨兵模式)

importorg.apache.commons.pool2.impl.GenericObjectPoolConfig;importorg.springframework.boot.autoconfigure.data.redis.RedisProperties;importorg.springframework.boot.context.properties.EnableConfigurationProperties;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.connection.RedisNode;importorg.springframework.data.redis.connection.RedisSentinelConfiguration;importorg.springframework.data.redis.connection.RedisServer;importorg.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;importorg.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;importorg.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;importorg.springframework.data.redis.core.StringRedisTemplate;importorg.springframework.data.redis.serializer.RedisSerializer;importorg.springframework.data.redis.serializer.StringRedisSerializer;importjava.time.Duration;importjava.util.List;/*** redis配置类*/@EnableConfigurationProperties(RedisProperties.class)

@Configurationpublic classRedisConfig {private finalRedisProperties properties;publicRedisConfig(RedisProperties properties) {this.properties =properties;

}

@Bean(name= "StringRedisTemplate")publicStringRedisTemplate stringRedisTemplate() {

StringRedisTemplate redisTemplate= newStringRedisTemplate();

RedisSerializer stringSerializer = newStringRedisSerializer();

redisTemplate.setKeySerializer(stringSerializer);

redisTemplate.setValueSerializer(stringSerializer);

redisTemplate.setHashKeySerializer(stringSerializer);

redisTemplate.setHashValueSerializer(stringSerializer);

redisTemplate.setConnectionFactory(getConnectionFactory());returnredisTemplate;

}

@BeanpublicRedisConnectionFactory getConnectionFactory() {//哨兵模式

RedisSentinelConfiguration configuration = newRedisSentinelConfiguration();

configuration.setMaster(properties.getSentinel().getMaster());

configuration.setPassword(properties.getPassword());

configuration.setDatabase(properties.getDatabase());

List nodes =properties.getSentinel().getNodes();

nodes.forEach(node->{

String[] str= node.split(":");

RedisNode redisServer= new RedisServer(str[0], Integer.parseInt(str[1]));

configuration.sentinel(redisServer);

});

LettuceConnectionFactory factory= newLettuceConnectionFactory(configuration, getPool());//使用前先校验连接,这个最好是要配置:不然会带来connection reset by peer

factory.setValidateConnection(true);returnfactory;

}

@BeanpublicLettuceClientConfiguration getPool() {

GenericObjectPoolConfig genericObjectPoolConfig= newGenericObjectPoolConfig();//redis客户端配置:超时时间默认

LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder

builder=LettucePoolingClientConfiguration.builder().

commandTimeout(Duration.ofMillis(60000));//链接池配置

RedisProperties.Pool pool =properties.getLettuce().getPool();

genericObjectPoolConfig.setMaxIdle(pool.getMaxIdle());

genericObjectPoolConfig.setMinIdle(pool.getMinIdle());

genericObjectPoolConfig.setMaxTotal(pool.getMaxActive());

genericObjectPoolConfig.setMaxWaitMillis(pool.getMaxWait().toMillis());

builder.shutdownTimeout(Duration.ofMillis(4000));

builder.poolConfig(genericObjectPoolConfig);returnbuilder.build();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值