• 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;
  • 相关阅读:
    简介anaconda下的jupyter notebook的代码分块运行
    此文件的签名已损坏或无效或360下载提示下载失败解决办法
    Java基础加强
    XML
    Servlet
    Tomcat
    json和跨域
    jQuery的ajax
    ajax请求状态码 以及 页面请求状态码
    ajax 基础
  • 原文地址:https://www.cnblogs.com/rainersha/p/15571076.html
Copyright © 2020-2023  润新知