springboot2.X使用连接池连接单机redis

springBoot1.x的时候使用连接池连接单机版的redis非常简单,使用JedisConnectionFactory即可

@Autowired
private RedisProperties redisProperties;
@Bean
public RedisTemplate redisTemplateOnline() {
    StringRedisTemplate template = new StringRedisTemplate();
    template.setConnectionFactory(getConnectionFactoryOnline());
    template.afterPropertiesSet();
    return template;
}

@Bean
public JedisConnectionFactory getConnectionFactoryOnline() {
    JedisConnectionFactory factory = new JedisConnectionFactory();
    //设置连接超时时间
    factory.setUsePool(true);
    factory.setTimeout(this.redisProperties.getTimeout());
    //IP
    factory.setHostName(this.redisProperties.getHost());
    //端口
    factory.setPort(this.redisProperties.getPort());
    //默认0
    factory.setDatabase(0);
    factory.setPoolConfig(this.redisProperties.jedisPoolConfig());
    return factory;
}

但是到了springBoot2.X的时候连接就不是那么简单了,JedisConnectionFactory中很多方法过时了,有了新的实现方法。

JedisConnectionFactory中的配置直接被拆分成了两个,一个是连接环境配置,另一个是客户端连接配置。

先说连接环境配置,共有三个实现类,分别是

RedisStandaloneConfiguration() 单机

RedisSentinelConfiguration() 哨兵

RedisClusterConfiguration() 集群

客户端连接配置使用接口 JedisClientConfiguration

这个接口下有4个创建器分别是

DefaultJedisClientConfigurationBuilder() 默认

JedisClientConfigurationBuilder() 客户端

JedisPoolingClientConfigurationBuilder() 连接池

JedisSslClientConfigurationBuilder() SSL

通过其中一个创建器来实现JedisClientConfiguration

不同的创建器可以设置的参数不一样

其中DefaultJedisClientConfigurationBuilder() 默认实现其他三个创建器,可以设置的参数最全,我是用的是这个

@Autowired
private RedisProperties redisProperties;
public JedisConnectionFactory getConnectionFactory() {
    RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
    //IP
    redisStandaloneConfiguration.setHostName(this.redisProperties.getHost());
    //端口
    redisStandaloneConfiguration.setPort(this.redisProperties.getPort());
    //密码
    if(StringUtils.isNotEmpty(redisProperties.getPassword())){
        redisStandaloneConfiguration.setPassword(this.redisProperties.getPassword());
    }
    JedisClientConfiguration.DefaultJedisClientConfigurationBuilder jpcb =
            (JedisClientConfiguration.DefaultJedisClientConfigurationBuilder)JedisClientConfiguration.builder();
    jpcb.poolConfig(this.redisProperties.jedisPoolConfig());
    jpcb.readTimeout(Duration.ofMillis(this.redisProperties.getTimeout()));
    //设置连接超时时间
    jpcb.connectTimeout(Duration.ofMillis(this.redisProperties.getTimeout()));
    //设置是否使用池不需要传参数了,这个方法会将这个属性置为true。
    jpcb.usePooling();
    JedisClientConfiguration jedisClientConfiguration = jpcb.build();
    JedisConnectionFactory factory = new JedisConnectionFactory(redisStandaloneConfiguration,jedisClientConfiguration);
    return factory;
}
@Bean
public RedisTemplate redisTemplateLastDataOnline() {
    JedisConnectionFactory factory = getConnectionFactory();
    //设置数据库号的方法我后来改成了在创建RedisTemplate的方法的里面,这样创建连接工厂的方法可以复用,就不用每个Template都写一个对应的了(快夸我聪明!)
    factory.getSentinelConfiguration().setDatabase(0);
    return serializerTemplete(factory);
}

是不是麻烦好多?!研究明白之后我整个人都不好了。。。。。

以下是RedisSentinelConfiguration 哨兵的使用方法

RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration(redisProperties.getMaster(),redisProperties.getNodes());
if(StringUtils.isNotEmpty(redisProperties.getPassword())){
    sentinelConfig.setPassword(redisProperties.getPassword());
}
JedisConnectionFactory factory = new JedisConnectionFactory(sentinelConfig,jedisClientConfiguration);

集群的使用方法


RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(boolRedisProperties.getNodes()); redisClusterConfiguration.setMaxRedirects(boolRedisProperties.getMaxRedirects()); redisClusterConfiguration.setPassword(boolRedisProperties.getPassword());

JedisConnectionFactory factory = new JedisConnectionFactory(redisClusterConfiguration,jedisClientConfiguration);

顺便说一下,springBoot 2.X 创建JedisConnectionFactory的时候【三种连接配置】都可以和JedisClientConfiguration一起作为构造方法的参数传入,但是如果第二个参数是JedisPoolConfig就不一样了,RedisStandaloneConfiguration不能和JedisPoolConfig一起构造,其他的两种是可以的哦。

你可能感兴趣的:(springboot2.X使用连接池连接单机redis)