springboot2.X使用连接池连接单机redis
springBoot1.x的时候使用连接池连接单机版的redis非常简单,使用JedisConnectionFactory即可
但是到了springBoot2.X的时候连接就不是那么简单了,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; }
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);
【springboot2.X使用连接池连接单机redis】顺便说一下,springBoot 2.X 创建JedisConnectionFactory的时候【三种连接配置】都可以和JedisClientConfiguration一起作为构造方法的参数传入,但是如果第二个参数是JedisPoolConfig就不一样了,RedisStandaloneConfiguration不能和JedisPoolConfig一起构造,其他的两种是可以的哦。
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(boolRedisProperties.getNodes()); redisClusterConfiguration.setMaxRedirects(boolRedisProperties.getMaxRedirects()); redisClusterConfiguration.setPassword(boolRedisProperties.getPassword());
JedisConnectionFactory factory = new JedisConnectionFactory(redisClusterConfiguration,jedisClientConfiguration);
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程
- 使用composer自动加载类文件
- android|android studio中ndk的使用
- 使用协程爬取网页,计算网页数据大小