我是靠谱客的博主 谦让大地,最近开发中收集的这篇文章主要介绍springboot+redis 配置多个dbIndex 遇到Cannot get Jedis connection的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import redis.clients.jedis.JedisPoolConfig;
@EnableCaching
@Configuration
public class RedisConfig {
@Value("${redis.pool.max-wait}")
private int redisPoolMaxWait;
@Value("${redis.pool.max-idle}")
private int redisPoolMaxIdle;
@Value("${redis.pool.min-idle}")
private int redisPoolMinIdle;
@Value("${redis.dbindex13}")
private int dbIndex13;
@Value("${redis.dbindex14}")
private int dbIndex14;
@Value("${redis.host}")
private String host;
@Value("${redis.port}")
private int port;
@Value("${redis.password}")
private String password;
@Bean
public JedisPoolConfig getJedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(redisPoolMaxIdle);
jedisPoolConfig.setMinIdle(redisPoolMinIdle);
jedisPoolConfig.setMaxWaitMillis(redisPoolMaxWait);
return jedisPoolConfig;
}
@Bean(name = "cacheRedisTemplate13")
public RedisTemplate<?, ?> getForeRedisTemplate(){
JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
connectionFactory.setPoolConfig(getJedisPoolConfig());
connectionFactory.setDatabase(dbIndex13); //此处配置database
connectionFactory.setHostName(host);
connectionFactory.setPassword(password);
connectionFactory.setPort(port);
connectionFactory.afterPropertiesSet();
//记得添加这行!
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(connectionFactory);
return stringRedisTemplate;
}
@Bean(name = "cacheRedisTemplate14")
public RedisTemplate<?, ?> getRedisTemplateDb14(){
JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
connectionFactory.setPoolConfig(getJedisPoolConfig());
connectionFactory.setDatabase(dbIndex14);
connectionFactory.setHostName(host);
connectionFactory.setPassword(password);
connectionFactory.setPort(port);
connectionFactory.afterPropertiesSet();
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(connectionFactory);
return stringRedisTemplate;
}
}
如上,参考网上资料配置了两个redisTemplate
本地测试使用时,正常插入各自对应的dbIndex
当发布到测试环境(Linux)时,只有dbIndex13正常使用,另一个会报错
Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisException: Could not get a resource from the pool
并不清楚为何出现此问题,希望有谁能解答。
此后将配置多个dbIndex改为动态切换dbIndex
配置代码同上,只是删除了cacheRedisTemplate14的配置
同时,使用cacheRedisTemplate时
JedisConnectionFactory jedisConnectionFactory = (JedisConnectionFactory) cacheRedisTemplate.getConnectionFactory();
jedisConnectionFactory.setDatabase(dbIndex13);
JedisConnectionFactory jedisConnectionFactory = (JedisConnectionFactory) cacheRedisTemplate.getConnectionFactory();
jedisConnectionFactory.setDatabase(dbIndex14);
最后
以上就是谦让大地为你收集整理的springboot+redis 配置多个dbIndex 遇到Cannot get Jedis connection的问题的全部内容,希望文章能够帮你解决springboot+redis 配置多个dbIndex 遇到Cannot get Jedis connection的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复