Springboot2.0集成Redis(StringRedisTemplate)多数据源

1、Maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

2、application.yml配置redis

spring:
  redis:
    database: 0  # Redis数据库索引(配置自己用的)
    database1: 1   # Redis数据库索引(配置自己用的)
    host: 127.0.0.1  # Redis服务器地址
    port: 6379  # Redis服务器连接端口
    password:    # Redis服务器连接密码(默认为空)
    timeout: 8000  # 连接超时时间(毫秒)

3、RedisTemplateConfig配置

  创建一个RedisTemplateConfig.class,这里配置了两个redis连接的database,没有特意配置两个连接池需要的配置,如果有需要可以自行添加,为了可以看到redis存储list、set等value,而且需要在接下来封装到StringUtils中,所以创建的是StringRedisTemlate

public class RedisTemplateConfig {
    /** redis数据库*/
    @Value("${spring.redis.database}")
    private int redisDatabase;
    /** redis数据库1*/
    @Value("${spring.redis.database1}")
    private int redis1Database;
    /** redis数据库ip*/
    @Value("${spring.redis.host}")
    private String redisHost;
    /** redis数据库端口*/
    @Value("${spring.redis.port}")
    private int redisPort;


    @Bean(name = "redisTemplate0")
    public StringRedisTemplate redisTemplate() {
        return buildRedisTemplate(buildConnectionFactory(jedisPoolConfig(),redisDatabase));
    }

    @Bean(name = "redisTemplate1")
    public StringRedisTemplate redisTemplate1() {
        return buildRedisTemplate(buildConnectionFactory(jedisPoolConfig(),redis1Database));
    }


     protected StringRedisTemplate buildRedisTemplate(RedisConnectionFactory connectionFactory) {
         StringRedisTemplate template = new StringRedisTemplate();
         template.setConnectionFactory(connectionFactory);
         template.setValueSerializer(stringRedisSerializer());
         template.afterPropertiesSet();
         return template;
     }

    @Bean
    public StringRedisSerializer stringRedisSerializer() {
        return new StringRedisSerializer();
    }

    /**
     * 连接池配置信息
     * @return
     */
    @Bean
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //最大连接数
        jedisPoolConfig.setMaxTotal(100);
        //最小空闲连接数
        jedisPoolConfig.setMinIdle(20);
        //当池内没有可用的连接时,最大等待时间
        jedisPoolConfig.setMaxWaitMillis(10000);
        return jedisPoolConfig;
    }

    /**
     * jedis连接工厂
     * @param jedisPoolConfig
     * @param database
     * @return
     */
    public JedisConnectionFactory buildConnectionFactory(JedisPoolConfig jedisPoolConfig, int database) {
        RedisStandaloneConfiguration redisStandaloneConfiguration =
                new RedisStandaloneConfiguration();
        //设置redis服务器的host或者ip地址
        redisStandaloneConfiguration.setHostName(redisHost);
        //设置默认使用的数据库
        redisStandaloneConfiguration.setDatabase(database);
        //设置redis的服务的端口号
        redisStandaloneConfiguration.setPort(redisPort);
        JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jedisBuilder=(JedisClientConfiguration.JedisPoolingClientConfigurationBuilder)JedisClientConfiguration.builder();
        jedisBuilder.poolConfig(jedisPoolConfig);
        JedisClientConfiguration jedisClientConfiguration = jedisBuilder.build();
        return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
    }

4、创建RedisUtils和Redis1Utils,分别注入config中声明的bean redisTemplate0和redisTemplate1

/**
 * Redis工具类
 */
@Component
public class RedisUtils {

    @Resource(name = "redisTemplate0")
    private StringRedisTemplate redisTemplate;

    public void setRedisTemplate(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public StringRedisTemplate getRedisTemplate() {
        return this.redisTemplate;
    }

    /** -------------------key相关操作--------------------- */

    /**
     * 删除key
     *
     * @param key
     */
    public void delete(String key) {
        redisTemplate.delete(key);
    }

    /**
     * 批量删除key
     *
     * @param keys
     */
    public void delete(Collection<String> keys) {
        redisTemplate.delete(keys);
    }

    /**
     * 序列化key
     *
     * @param key
     * @return
     */
    public byte[] dump(String key) {
        return redisTemplate.dump(key);
    }

    /**
     * 是否存在key
     *
     * @param key
     * @return
     */
    public Boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }
}
@Component
public class Redis1Utils {

    @Resource(name = "redisTemplate1")
    private StringRedisTemplate redisTemplate;

    public void setRedisTemplate(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public StringRedisTemplate getRedisTemplate() {
        return this.redisTemplate;
    }

    /** -------------------key相关操作--------------------- */

    /**
     * 删除key
     *
     * @param key
     */
    public void delete(String key) {
        redisTemplate.delete(key);
    }

    /**
     * 批量删除key
     *
     * @param keys
     */
    public void delete(Collection<String> keys) {
        redisTemplate.delete(keys);
    }

    /**
     * 序列化key
     *
     * @param key
     * @return
     */
    public byte[] dump(String key) {
        return redisTemplate.dump(key);
    }

    /**
     * 是否存在key
     *
     * @param key
     * @return
     */
    public Boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }
}

  RedisUtils操作太多了只截取了部分,主要展示通过@Resource注入了不同的StringRedisTemplate

5、Controller中的使用

  根据个人需要各自注入,然后就可以分别操作不同的redis库了

@Autowired
private RedisUtils redisUtils;
@Autowired
private Redis1Utils redis1Utils;
在Spring Boot中集成多个Redis数据源需要进行以下步骤: 1. 添加依赖:在pom.xml文件中添加Spring Boot Redis和Jedis依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> ``` 2. 配置多个数据源:在application.properties或application.yml文件中配置多个Redis数据源的连接信息。示例配置如下: ```properties # 第一个数据源 spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= spring.redis.database=0 # 第二个数据源 spring.redis.second.host=127.0.0.1 spring.redis.second.port=6380 spring.redis.second.password= spring.redis.second.database=1 ``` 3. 创建多个RedisTemplate:在配置类中创建多个RedisTemplate,每个Template对应一个Redis数据源。示例代码如下: ```java @Configuration public class RedisConfig { @Bean @Primary public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); // 设置key和value的序列化器 template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } @Bean("secondRedisTemplate") public RedisTemplate<String, Object> secondRedisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); // 设置key和value的序列化器 template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } } ``` 4. 使用多个数据源:在需要使用Redis的地方,注入对应的RedisTemplate即可。示例代码如下: ```java @RestController public class RedisController { @Autowired private RedisTemplate<String, Object> redisTemplate; @Autowired @Qualifier("secondRedisTemplate") private RedisTemplate<String, Object> secondRedisTemplate; @RequestMapping("/set") public String set() { redisTemplate.opsForValue().set("key1", "value1"); secondRedisTemplate.opsForValue().set("key2", "value2"); return "success"; } @RequestMapping("/get") public String get() { String value1 = (String) redisTemplate.opsForValue().get("key1"); String value2 = (String) secondRedisTemplate.opsForValue().get("key2"); return "value1: " + value1 + ", value2: " + value2; } } ``` 以上就是在Spring Boot中集成多个Redis数据源的简要步骤。通过配置不同的数据源和创建对应的RedisTemplate,可以实现对多个Redis实例的访问和操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值