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);
【springboot2.X使用连接池连接单机redis】顺便说一下,springBoot 2.X 创建JedisConnectionFactory的时候【三种连接配置】都可以和JedisClientConfiguration一起作为构造方法的参数传入,但是如果第二个参数是JedisPoolConfig就不一样了,RedisStandaloneConfiguration不能和JedisPoolConfig一起构造,其他的两种是可以的哦。

    推荐阅读