springboot 2.x版本Redis设置JedisConnectionFactory.setHostName()过时

原文转载:https://blog.csdn.net/Soda_lw/article/details/82661705

一、今天新建一个项目用以前的方式集成redis时,发现JedisConnectionFactory.sethostName等方法提示过时,并且RedisCacheManager的配置构造方法也改变了,显示错误。2.X版本可以使用RedisStandaloneConfiguration、RedisSentinelConfiguration、RedisClusterConfiguration三种方式配置连接信息。
这里我们以RedisStandaloneConfiguration为例,修改之前的配置。 

  1.  
    @Bean
  2.  
    public JedisConnectionFactory redisConnectionFactory() {
  3.  
    RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
  4.  
    redisStandaloneConfiguration.setHostName(host);
  5.  
    redisStandaloneConfiguration.setPort(port);
  6.  
    return new JedisConnectionFactory(redisStandaloneConfiguration);
  7.  
    }

同样的RedisCacheManager的配置方式也不能再以RedisTemplate为参数初始化,参考:官方文档
我们改为: 

  1. @Bean
  2.  
    public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory){
  3.  
    return RedisCacheManager.create(connectionFactory);
  4.  
    }

二、以上配置使用的是直接连接redis的方式,即每次连接都创建新的连接。当并发量剧增时,这会带来性能上开销,同时由于没有对连接数进行限制,则可能使服务器崩溃导致无法响应。所以我们一般都会建立连接池,事先初始化一组连接,供需要redis连接的线程取用。

我们定义连接池配置信息:

  1.  
    /**
  2.  
    * 连接池配置信息
  3.  
    */
  4.  
    @Bean
  5.  
    public JedisPoolConfig jedisPoolConfig(){
  6.  
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  7.  
    //最大连接数
  8.  
    jedisPoolConfig.setMaxTotal(100);
  9.  
    //最小空闲连接数
  10.  
    jedisPoolConfig.setMinIdle(20);
  11.  
    //当池内没有可用连接时,最大等待时间
  12.  
    jedisPoolConfig.setMaxWaitMillis(10000);
  13.  
    //其他属性可以自行添加
  14.  
    return jedisPoolConfig;
  15.  
    }

在配置jedis连接工厂,用下面的替代我们第一步中配置的JedisConnectionFactory

  1.  
    /**
  2.  
    * jedis连接工厂
  3.  
    * @param jedisPoolConfig
  4.  
    * @return
  5.  
    */
  6.  
    @Bean
  7.  
    public RedisConnectionFactory redisConnectionFactory(JedisPoolConfig jedisPoolConfig) {
  8.  
    RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
  9.  
    //设置redis服务器的host或者ip地址
  10.  
    redisStandaloneConfiguration.setHostName(host);
  11.  
    redisStandaloneConfiguration.setPort(port);
  12.  
    //获得默认的连接池构造
  13.  
    //这里需要注意的是,edisConnectionFactoryJ对于Standalone模式的没有(RedisStandaloneConfiguration,JedisPoolConfig)的构造函数,对此
  14.  
    //我们用JedisClientConfiguration接口的builder方法实例化一个构造器,还得类型转换
  15.  
    JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcf = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration.builder();
  16.  
    //修改我们的连接池配置
  17.  
    jpcf.poolConfig(jedisPoolConfig);
  18.  
    //通过构造器来构造jedis客户端配置
  19.  
    JedisClientConfiguration jedisClientConfiguration = jpcf.build();
  20.  
     
  21.  
    return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
  22.  
    }

 

posted @ 2021-12-08 11:37  疯子110  阅读(1101)  评论(0编辑  收藏  举报