原文轉載:https://blog.csdn.net/Soda_lw/article/details/82661705
一、今天新建一個項目用以前的方式集成redis時,發現JedisConnectionFactory.sethostName等方法提示過時,並且RedisCacheManager的配置構造方法也改變了,顯示錯誤。2.X版本可以使用RedisStandaloneConfiguration、RedisSentinelConfiguration、RedisClusterConfiguration三種方式配置連接信息。
這里我們以RedisStandaloneConfiguration為例,修改之前的配置。
-
-
public JedisConnectionFactory redisConnectionFactory() {
-
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
-
redisStandaloneConfiguration. setHostName(host);
-
redisStandaloneConfiguration. setPort(port);
-
return new JedisConnectionFactory(redisStandaloneConfiguration);
-
}
同樣的RedisCacheManager的配置方式也不能再以RedisTemplate為參數初始化,參考:官方文檔
我們改為:
-
-
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
-
*/
-
-
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);
-
}