springboot 2.x版本Redis設定JedisConnectionFactory.setHostName()過時
阿新 • • 發佈:2018-11-10
原文轉載: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);
}