Lettuce单机版 双数据源
原地址
https://codeleading.com/article/24214844571/
下面是复制只是备份作用,直接看原地址即可
前言
Springboot 2.X系列中已经将默认的Redis客户端由Jedis改为Lettuce了,所以本文主要介绍通过Lettuce配置Redis多数据源。大家在配置时Springboot必须为2.0以上版本,我测试时使用的Springboot版本为2.2.0。
一、导入依赖
使用Lettuce连接Redis时用到了commons-pools,所以需要导入该依赖。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
二、配置相关参数
我是在application.properties文件中配置的,yml格式的改一下即可。
# redis1 spring.redis.database=0 spring.redis.host=192.168.1.120 spring.redis.port=6379 spring.redis.password= spring.redis.timeout=1000 # 连接池最大连接数(使用负值表示没有限制) 默认为8 spring.redis.lettuce.pool.max-active=100 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认为-1 spring.redis.lettuce.pool.max-wait=-1 # 连接池中的最大空闲连接 默认为8 spring.redis.lettuce.pool.max-idle=8 # 连接池中的最小空闲连接 默认为 0 spring.redis.lettuce.pool.min-idle=0 # redis2 spring.redis2.database=1 spring.redis2.host=192.168.1.118 spring.redis2.port=6379 spring.redis2.password=
三、增加Redis配置文件
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.StringRedisTemplate;
import java.time.Duration;
/**
* @author 陈伟平
* @date 2020-10-20 14:56:00
*/
@EnableCaching
@Configuration
public class RedisConfig {
@Value("${spring.redis.lettuce.pool.max-idle}")
int maxIdle;
@Value("${spring.redis.lettuce.pool.max-active}")
int maxActive;
@Value("${spring.redis.lettuce.pool.max-wait}")
long maxWaitMillis;
@Value("${spring.redis.lettuce.pool.min-idle}")
int minIdle;
@Value("${spring.redis.timeout}")
int timeout;
@Bean(name = "LoginRedisTemplate")
public StringRedisTemplate redisTemplate(@Value("${spring.redis.database}") int database,
@Value("${spring.redis.host}") String hostName,
@Value("${spring.redis.port}") int port,
@Value("${spring.redis.password}") String password) {
StringRedisTemplate temple = new StringRedisTemplate();
temple.setConnectionFactory(connectionFactory(database, hostName, port, password));
return temple;
}
@Bean(name = "DeviceRedisTemplate")
public StringRedisTemplate redisUatTemplate(@Value("${spring.redis2.database}") int database,
@Value("${spring.redis2.host}") String hostName,
@Value("${spring.redis2.port}") int port,
@Value("${spring.redis2.password}") String password) {
StringRedisTemplate temple = new StringRedisTemplate();
temple.setConnectionFactory(connectionFactory(database, hostName, port, password));
return temple;
}
/**
* 使用lettuce配置Redis连接信息
*
* @param database Redis数据库编号
* @param hostName 服务器地址
* @param port 端口
* @param password 密码
* @return RedisConnectionFactory
*/
public RedisConnectionFactory connectionFactory(int database, String hostName, int port, String password) {
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
configuration.setHostName(hostName);
configuration.setPort(port);
if (StringUtils.isNotBlank(password)) {
configuration.setPassword(password);
}
if (database != 0) {
configuration.setDatabase(database);
}
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
genericObjectPoolConfig.setMaxIdle(maxIdle);
genericObjectPoolConfig.setMinIdle(minIdle);
genericObjectPoolConfig.setMaxTotal(maxActive);
genericObjectPoolConfig.setMaxWaitMillis(maxWaitMillis);
LettuceClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
.commandTimeout(Duration.ofMillis(timeout))
.poolConfig(genericObjectPoolConfig)
.build();
LettuceConnectionFactory lettuce = new LettuceConnectionFactory(configuration, clientConfig);
lettuce.afterPropertiesSet();
return lettuce;
}
}
四、使用
使用时在需要的地方注入对应的Redis数据源即可。
@Autowired
@Resource(name = "LoginRedisTemplate")
private StringRedisTemplate stringRedisTemplate;
@Autowired
@Resource(name = "DeviceRedisTemplate")
StringRedisTemplate stringRedisTemplate;

浙公网安备 33010602011771号