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;
posted @ 2021-11-18 10:26  刘维风  阅读(162)  评论(0编辑  收藏  举报