springboot配置多redisTemplete

it2023-06-13  70

最近在开发的过程中遇到一个springboot服务需要访问不同的redis集群,默认的springboot只支持单个

StringRedisTemplate实例,于是就研究了一下配置多StringRedisTemplate 实例。

配置类:

package com.risk.engine.config.redis; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.data.redis.connection.RedisClusterConfiguration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisNode; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; import redis.clients.jedis.JedisPoolConfig; import java.util.HashSet; import java.util.Set; /** * */ @Configuration public class RedisConfig { @Value("${redis.cluster.nodes}") protected String redisNodes; @Value("${redis.cluster.nodes2}") protected String redisNodes2; @Value("${redis.maxTotal}") protected int maxTotal; @Value("${redis.testOnBorrow}") protected boolean testOnBorrow; @Value("${redis.testOnReturn}") protected boolean testOnReturn; @Value("${redis.pool.min-idle}") protected int minIdle; @Value("${redis.pool.max-idle}") protected int maxIdle; @Value("${redis.pool.max-wait}") protected long maxWaitMillis; @Value("${redis.timeout}") protected int timeout; @Value("${redis.password2}") protected String password2; @Primary @Bean public RedisClusterConfiguration redisClusterConfiguration(){ RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(); //Set<RedisNode> clusterNodes String[] serverArray = redisNodes.split(","); Set<RedisNode> nodes = new HashSet<RedisNode>(); for(String ipPort:serverArray){ String[] ipAndPort = ipPort.split(":"); nodes.add(new RedisNode(ipAndPort[0].trim(),Integer.valueOf(ipAndPort[1]))); } redisClusterConfiguration.setClusterNodes(nodes); //redisClusterConfiguration.setMaxRedirects(mmaxRedirectsac); return redisClusterConfiguration; } @Bean public RedisClusterConfiguration redisClusterConfiguration2(){ RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(); //Set<RedisNode> clusterNodes String[] serverArray = redisNodes2.split(","); Set<RedisNode> nodes = new HashSet<RedisNode>(); for(String ipPort:serverArray){ String[] ipAndPort = ipPort.split(":"); nodes.add(new RedisNode(ipAndPort[0].trim(),Integer.valueOf(ipAndPort[1]))); } redisClusterConfiguration.setClusterNodes(nodes); //redisClusterConfiguration.setMaxRedirects(mmaxRedirectsac); return redisClusterConfiguration; } @Bean public JedisPoolConfig jedisPoolConfig() { JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(maxTotal); poolConfig.setMinIdle(minIdle); poolConfig.setMaxIdle(maxIdle); poolConfig.setMaxWaitMillis(maxWaitMillis); poolConfig.setTestOnBorrow(testOnBorrow); poolConfig.setTestOnReturn(testOnReturn); return poolConfig; } @Bean public StringRedisSerializer stringRedisSerializer() { return new StringRedisSerializer(); } //交易地址缓存 @Bean public StringRedisTemplate stringRedisTemplate() { return buildRedisTemplate(buildConnectionFactory()); } //模型缓存 @Bean(name = "stringRedisTemplate2") public StringRedisTemplate stringRedisTemplate2() { return buildRedisTemplate(buildConnectionFactory2()); } private JedisConnectionFactory buildConnectionFactory() { JedisConnectionFactory connectionFactory = new JedisConnectionFactory(redisClusterConfiguration(), jedisPoolConfig()); connectionFactory.setUsePool(true); connectionFactory.setTimeout(timeout); connectionFactory.setDatabase(0); //connectionFactory.setPassword(password); connectionFactory.afterPropertiesSet(); return connectionFactory; } private JedisConnectionFactory buildConnectionFactory2() { JedisConnectionFactory connectionFactory = new JedisConnectionFactory(redisClusterConfiguration2(), jedisPoolConfig()); connectionFactory.setUsePool(true); connectionFactory.setTimeout(timeout); connectionFactory.setDatabase(0); if(StringUtils.isNotEmpty(password2)){ connectionFactory.setPassword(password2); } connectionFactory.afterPropertiesSet(); return connectionFactory; } protected StringRedisTemplate buildRedisTemplate(RedisConnectionFactory connectionFactory) { StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(connectionFactory); template.setValueSerializer(stringRedisSerializer()); template.afterPropertiesSet(); return template; } }

properties:

redis.cluster.nodes=192.168.0.232:6379,192.168.0.232:6380,192.168.0.232:6381,192.168.0.233:6382,192.168.0.233:6383,192.168.0.233:6384 #spring.redis.cluster.nodes=192.168.0.232:6379,192.168.0.232:6380,192.168.0.232:6381,192.168.0.233:6382,192.168.0.233:6383,192.168.0.233:6384 redis.pool.max-wait=6000 redis.pool.max-idle=50 redis.pool.min-idle=20 redis.timeout=60000 #模型缓存 redis.cluster.nodes2=192.168.0.232:6001,192.168.0.232:6002,192.168.0.232:6003,192.168.0.233:6004,192.168.0.233:6005,192.168.0.233:6006 redis.maxTotal=2000 redis.testOnBorrow=true redis.testOnReturn=true redis.password2=redis123

pom.xml:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

配置之后srpingboot默认的StringRedisTemplate已经变成了自己配置的实例。

最新回复(0)