redis链接多数据源

@Value(" r e d i s . h o s t " ) p r i v a t e S t r i n g h o s t N a m e ; @ V a l u e ( " {redis.host}") private String hostName; @Value(" redis.host")privateStringhostName;@Value("{redis.port}")
private int port;
@Value(" r e d i s . p a s s w o r d " ) p r i v a t e S t r i n g p a s s W o r d ; @ V a l u e ( " {redis.password}") private String passWord; @Value(" redis.password")privateStringpassWord;@Value("{redis.maxIdle}")
private int maxIdl;
@Value(" r e d i s . m i n I d l e " ) p r i v a t e i n t m i n I d l ; @ V a l u e ( " {redis.minIdle}") private int minIdl; @Value(" redis.minIdle")privateintminIdl;@Value("{redis.timeout}")
private int timeout;

private int defaultDb;

@Value("${redis.dbs}")
private List<Integer> dbs;


public static Map<Integer, RedisTemplate<Serializable, Object>> redisTemplateMap = new HashMap<>();

@PostConstruct
public void initRedisTemp() throws Exception {
	log.info("###### START 初始化 Redis 连接池 START ######");
	defaultDb = dbs.get(0);
	for (Integer db : dbs) {
		log.info("###### 正在加载Redis-db-" + db+ " ######");
		redisTemplateMap.put(db, redisTemplateObject(db));
	}
	log.info("###### END 初始化 Redis 连接池 END ######");
}

public RedisTemplate<Serializable, Object> redisTemplateObject(Integer dbIndex) throws Exception {
	RedisTemplate<Serializable, Object> redisTemplateObject = new RedisTemplate<Serializable, Object>();
	redisTemplateObject.setConnectionFactory(redisConnectionFactory(jedisPoolConfig(), dbIndex));
	setSerializer(redisTemplateObject);
	redisTemplateObject.afterPropertiesSet();
	return redisTemplateObject;
}

/**
 * 连接池配置信息
 * 
 * @return
 */
public JedisPoolConfig jedisPoolConfig() {
	JedisPoolConfig poolConfig = new JedisPoolConfig();
	// 最大连接数
	poolConfig.setMaxIdle(maxIdl);
	// 最小空闲连接数
	poolConfig.setMinIdle(minIdl);
	poolConfig.setTestOnBorrow(true);
	poolConfig.setTestOnReturn(true);
	poolConfig.setTestWhileIdle(true);
	poolConfig.setNumTestsPerEvictionRun(10);
	poolConfig.setTimeBetweenEvictionRunsMillis(60000);
	// 当池内没有可用的连接时,最大等待时间
	poolConfig.setMaxWaitMillis(10000);
	// ------其他属性根据需要自行添加-------------
	return poolConfig;
}

/**
 * jedis连接工厂
 * 
 * @param jedisPoolConfig
 * @return
 */
public RedisConnectionFactory redisConnectionFactory(JedisPoolConfig jedisPoolConfig, int db) {
	// 单机版jedis
	RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
	// 设置redis服务器的host或者ip地址
	redisStandaloneConfiguration.setHostName(hostName);
	// 设置默认使用的数据库
	redisStandaloneConfiguration.setDatabase(db);
	// 设置密码
	redisStandaloneConfiguration.setPassword(RedisPassword.of(passWord));
	// 设置redis的服务的端口号
	redisStandaloneConfiguration.setPort(port);

	// 获得默认的连接池构造器(怎么设计的,为什么不抽象出单独类,供用户使用呢)
	JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration
			.builder();
	// 指定jedisPoolConifig来修改默认的连接池构造器(真麻烦,滥用设计模式!)
	jpcb.poolConfig(jedisPoolConfig);
	// 通过构造器来构造jedis客户端配置
	JedisClientConfiguration jedisClientConfiguration = jpcb.build();
	// 单机配置 + 客户端配置 = jedis连接工厂
	return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
}

private void setSerializer(RedisTemplate<Serializable, Object> template) {
	template.setKeySerializer(new StringRedisSerializer());
	template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
}


public RedisTemplate<Serializable, Object> getRedisTemplateByDb(int db){
        return redisTemplateMap.get(db);
    }

public RedisTemplate<Serializable, Object> getRedisTemplate(){
        return redisTemplateMap.get(defaultDb);
    }

作者:724555508
链接:https://ld246.com/article/1594863004207
来源:链滴
协议:CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/v使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值