1. 程式人生 > >springboot 2.x版本Redis設定JedisConnectionFactory.setHostName()過時

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為例,修改之前的配置。 

@Bean
    public JedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName(host);
        redisStandaloneConfiguration.setPort(port);
        return new JedisConnectionFactory(redisStandaloneConfiguration);
    }

同樣的RedisCacheManager的配置方式也不能再以RedisTemplate為引數初始化,參考:官方文件
我們改為:

@Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory){
        return RedisCacheManager.create(connectionFactory);
    }

二、以上配置使用的是直接連線redis的方式,即每次連線都建立新的連線。當併發量劇增時,這會帶來效能上開銷,同時由於沒有對連線數進行限制,則可能使伺服器崩潰導致無法響應。所以我們一般都會建立連線池,事先初始化一組連線,供需要redis連線的執行緒取用。

我們定義連線池配置資訊:

    /**
     * 連線池配置資訊
     */
    @Bean
    public JedisPoolConfig jedisPoolConfig(){
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //最大連線數
        jedisPoolConfig.setMaxTotal(100);
        //最小空閒連線數
        jedisPoolConfig.setMinIdle(20);
        //當池內沒有可用連線時,最大等待時間
        jedisPoolConfig.setMaxWaitMillis(10000);
        //其他屬性可以自行新增
        return jedisPoolConfig;
    }

在配置jedis連線工廠,用下面的替代我們第一步中配置的JedisConnectionFactory

     /**
     * jedis連線工廠
     * @param jedisPoolConfig
     * @return
     */
    @Bean
    public RedisConnectionFactory redisConnectionFactory(JedisPoolConfig jedisPoolConfig) {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        //設定redis伺服器的host或者ip地址
        redisStandaloneConfiguration.setHostName(host);
        redisStandaloneConfiguration.setPort(port);
        //獲得預設的連線池構造
        //這裡需要注意的是,edisConnectionFactoryJ對於Standalone模式的沒有(RedisStandaloneConfiguration,JedisPoolConfig)的建構函式,對此
        //我們用JedisClientConfiguration介面的builder方法例項化一個構造器,還得型別轉換
        JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcf = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration.builder();
        //修改我們的連線池配置
        jpcf.poolConfig(jedisPoolConfig);
        //通過構造器來構造jedis客戶端配置
        JedisClientConfiguration jedisClientConfiguration = jpcf.build();

        return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
    }