Spring Boot不同版本Redis設(shè)置JedisConnectionFactory詳解
Spring Boot不同版本Redis設(shè)置JedisConnectionFactory的方式
最近重構(gòu)項目想引入Redis,之前1.0版本看項目里用的本地緩存Guava,這次重構(gòu)后考慮要不要加入Redis。打算試試~
因為我以前做的項目用的Spring Boot版本比較低。還是老的 1.5.X版本的。 之前設(shè)置 JedisConnectionFactory 的方式與現(xiàn)在 2.X 版本有點不一樣,所以記錄一下,方便以后查看。
1.X 版本
設(shè)置 JedisConnectionFactory 方法:
@Bean
public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig){
String[] hostAndPorts = env.getProperty("spring.redis.cluster.nodes").split(",");
JedisConnectionFactory jedisConnectionFactory = null;
if(hostAndPorts.length==1){
//單機版
String host = hostAndPorts[0].split(":")[0];
int port = Integer.valueOf(hostAndPorts[0].split(":")[1]);
String password = env.getProperty("spring.redis.password");
jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setPoolConfig(jedisPoolConfig);
jedisConnectionFactory.setDatabase(1);
jedisConnectionFactory.setHostName(host);
jedisConnectionFactory.setPassword(password);
jedisConnectionFactory.setPort(port);
jedisConnectionFactory.setTimeout(5000);
jedisConnectionFactory.afterPropertiesSet();
}else{
//集群版
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
String password = env.getProperty("spring.redis.password");
Set<RedisNode> nodes = new HashSet<RedisNode>();
for (String ipPort:hostAndPorts){
String[] ipAndPort = ipPort.split(":");
nodes.add(new RedisNode(ipAndPort[0].trim(),Integer.valueOf(ipAndPort[1])));
}
redisClusterConfiguration.setClusterNodes(nodes);
redisClusterConfiguration.setMaxRedirects(200);
jedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration,jedisPoolConfig);
jedisConnectionFactory.setPassword(password);
jedisConnectionFactory.afterPropertiesSet();
}
return jedisConnectionFactory;
}在 2.X 版本使用的話會提示方法已過期,推薦使用下面的方法。
2.X 版本
2.X 版本可以使用 RedisStandaloneConfiguration 來配置連接信息。
@Bean
public JedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(env.getProperty("spring.redis.host"));
redisStandaloneConfiguration.setPort(Integer.parseInt(env.getProperty("spring.redis.port")));
redisStandaloneConfiguration.setPassword(env.getProperty("spring.redis.password"));
redisStandaloneConfiguration.setDatabase(Integer.parseInt(env.getProperty("spring.redis.database")));
return new JedisConnectionFactory(redisStandaloneConfiguration);
}以上配置使用的是直接連接 Redis 的方式,即每次連接都創(chuàng)建新的連接。當(dāng)并發(fā)量劇增時,這會帶來性能上開銷,同時由于沒有對連接數(shù)進行限制,則可能使服務(wù)器崩潰導(dǎo)致無法響應(yīng)。
所以一般情況下都會建立連接池,事先初始化一組連接,供需要 Redis 連接的線程取用。
@Bean
public JedisConnectionFactory redisConnectionFactory() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(200);
jedisPoolConfig.setMaxIdle(150);
jedisPoolConfig.setMinIdle(50);
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(env.getProperty("spring.redis.host"));
redisStandaloneConfiguration.setPort(Integer.parseInt(env.getProperty("spring.redis.port")));
redisStandaloneConfiguration.setPassword(env.getProperty("spring.redis.password"));
redisStandaloneConfiguration.setDatabase(Integer.parseInt(env.getProperty("spring.redis.database")));
JedisClientConfiguration.JedisClientConfigurationBuilder configurationBuilder = JedisClientConfiguration.builder();
JedisClientConfiguration jedisClientConfiguration = configurationBuilder.usePooling().poolConfig(jedisPoolConfig).build();
return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
}以上就是Spring Boot不同版本Redis設(shè)置JedisConnectionFactory詳解的詳細內(nèi)容,更多關(guān)于Spring Boot Redis設(shè)置JedisConnectionFactory的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Java?ReentrantLock可重入,可打斷,鎖超時的實現(xiàn)原理
前面講解了ReentrantLock加鎖和解鎖的原理實現(xiàn),但是沒有闡述它的可重入、可打斷以及超時獲取鎖失敗的原理,本文就重點講解這三種情況,需要的可以了解一下2022-10-10
使用Vert.x Maven插件快速創(chuàng)建項目的方法
這篇文章主要介紹了使用Vert.x Maven插件快速創(chuàng)建項目的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
在JAVA?Web項目中動態(tài)加載DLL/SO文件的方法
在JAVA?Web項目中,我們經(jīng)常需要調(diào)用一些第三方庫或者實現(xiàn)一些JAVA本身不支持的功能,這時,我們可能會考慮使用JNI來調(diào)用DLL或SO文件,然而,因此,本文將介紹如何在JAVA?Web項目中動態(tài)加載DLL/SO文件,需要的朋友可以參考下2024-12-12

