Springboot 2.X配置Redis多数据源(Lettuce单机版)

it2023-05-22  67

前言

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;

五、关注回复【book】

本人会经常更新博客,并在文章接口附上更新时间,欢迎大家关注公众号frost2! 转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weipinggg/article/details/109182476

最新回复(0)