本文介绍: 以上配置中,traindbuserdb就是两个不同的Redis数据库我们可以根据需要配置任意个。本文介绍在spring boot下,如何redis配置多个database数据源pom.xml文件spring boot版本使用的是2.6.10版本。2、配置类:RedisConfig.java

本文介绍在spring boot下,如何redis配置多个database数据源

一、pom依赖
pom.xml文件spring boot版本使用的是2.6.10版本

<parent>
  <groupId>org.springframework.boot</groupId>
  &lt;artifactId&gt;spring-boot-starter-parent</artifactId>
  <version>2.6.10</version>
  <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
  <!--
  1.x 版本默认采用连接池技术的Jedis
  2.0 以上的版本默认连接池是Lettuce
  如果采用Jedis需要排除Lettuce依赖
  -->
  <exclusions>
    <exclusion>
      <groupId>io.lettuce</groupId>
      <artifactId>lettuce-core</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>3.7.1</version>
</dependency>

二、配置Redis
1、application.yml配置文件

##################### Redis配置 ######################
redis:
  # 此处填写你的Redis服务器的实际IP端口号
  host: 127.0.0.1
  port: 6379
  # 此处填写登录Redis的真实密码
  password: 123456
  # 连接超时时间毫秒
  timeout: 3000
  jedis:
    pool:
      # 最大连接数
      max-active: 50
      # 最大连接阻塞等待时间毫秒
      max-wait: 1000
      # 最大空闲连接数
      max-idle: 20
      # 最小空闲连接数默认0
      min-idle: 5
      # 在获取连接是否检查有效性
      test-on-borrow: true
      # 在归还连接是否检查有效性
      test-on-return: false
  database:
    # 列车信息数据库索引
    train-db: 4
    # 用户信息数据库索引
    user-db: 2

以上配置中,traindbuserdb就是两个不同的Redis数据库我们可以根据需要配置任意个。

database:
    # 列车信息数据库索引
    train-db: 4
    # 用户信息数据库索引
    user-db: 2

2、配置类:RedisConfig.java

import org.springframework.beans.factory.annotation.Value;
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.RedisPassword;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
import java.time.Duration;

@Configuration
public class RedisConfig {
    @Value("${redis.host}")
    private String hostName;
    @Value("${redis.port}")
    private int port;
    @Value("${redis.password}")
    private String password;

    @Value("${redis.database.ilstatus-db}")
    private int databaseILStatus;
    @Value("${redis.database.atsstatus-db}")
    private int databaseATSStatus;
    @Value("${redis.database.user-db}")
    private int databaseUser;
    @Value("${redis.database.train-db}")
    private int databaseTrain;

    @Value("${redis.jedis.pool.max-active}")
    private int maxTotal; //连接池最大连接数
    @Value("${redis.jedis.pool.max-idle}")
    private int maxIdle; //最大空闲连接数
    @Value("${redis.jedis.pool.min-idle}")
    private int minIdle; //最小空闲连接数
    @Value("${redis.jedis.pool.max-wait}")
    private int maxWait; //当池内没有可用的连接时,最大等待时间
    @Value("${redis.jedis.pool.test-on-borrow}")
    private boolean testOnBorrow; //在获取连接时是否检查有效性
    @Value("${redis.jedis.pool.test-on-return}")
    private boolean testOnReturn; //在归还连接时是否检查有效性
    
    public static final String REDIS_TEMPLATE_USER = "userRedisTemplate";
    public static final String REDIS_TEMPLATE_TRAIN = "trainRedisTemplate";

    @Bean(REDIS_TEMPLATE_USER)
    public RedisTemplate<String, Object> userRedisTemplate() {
        return getRedisTemplate(databaseUser);
    }

    @Bean(REDIS_TEMPLATE_TRAIN)
    public RedisTemplate<String, Object> trainRedisTemplate() {
        return getRedisTemplate(databaseTrain);
    }

    private RedisTemplate<String, Object> getRedisTemplate(int database) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate();

        redisTemplate.setConnectionFactory(getRedisConnectionFactory(database));
        /** key采用StringRedisSerializer序列化 */
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        /** 设置hash keyvalue序列化方式 */
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();

        return redisTemplate;
    }

    private RedisConnectionFactory getRedisConnectionFactory(int database) {
        /** 单机配置 + 客户端配置 = jedis连接工厂 */
        JedisConnectionFactory jedisConnectionFactory =
                new JedisConnectionFactory(getRedisStandaloneConfig(database), getJedisClientConfig());
        jedisConnectionFactory.afterPropertiesSet();

        return jedisConnectionFactory;
    }

    private RedisStandaloneConfiguration getRedisStandaloneConfig(int database) {
        RedisStandaloneConfiguration redisStandaloneConfig = new RedisStandaloneConfiguration();
        redisStandaloneConfig.setHostName(hostName);
        redisStandaloneConfig.setPort(port);
        redisStandaloneConfig.setPassword(RedisPassword.of(password));
        redisStandaloneConfig.setDatabase(database);
        return redisStandaloneConfig;
    }

    private JedisClientConfiguration getJedisClientConfig() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(maxTotal); //连接池最大连接数
        jedisPoolConfig.setMaxIdle(maxIdle); //最大空闲连接数
        jedisPoolConfig.setMinIdle(minIdle); //最小空闲连接数
        //当池内没有可用的连接时,最大等待时间
        jedisPoolConfig.setMaxWait(Duration.ofMillis(maxWait));
        //在获取连接时是否检查有效性, 默认false
        jedisPoolConfig.setTestOnBorrow(testOnBorrow);
        //在归还连接时是否检查有效性, 默认false
        jedisPoolConfig.setTestOnReturn(testOnReturn);

        JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpccb =
                (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder)JedisClientConfiguration.builder();
        jpccb.poolConfig(jedisPoolConfig);

        return jpccb.build();
    }
}

三、使用Redis
UserRedisProxy.java

@Component
public class UserRedisProxy {
    @Resource(name = RedisConfig.REDIS_TEMPLATE_USER)
    private RedisTemplate<String, Object> redisTemplate;
 
    public Object getUserInfo(String key) {
        return  redisTemplate.opsForValue().get(key);
    }
}

TrainRedisProxy.java

@Component
public class TrainRedisProxy {
    @Resource(name = RedisConfig.REDIS_TEMPLATE_TRAIN)
    private RedisTemplate<String, Object> redisTemplate;
 
    public Object getTrainInfo(String key) {
        return  redisTemplate.opsForValue().get(key);
    }
}

原文地址:https://blog.csdn.net/minihuabei/article/details/130336537

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_37948.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注