springboot系列十、springboot整合redis、多redis数据源配置

 

一、简介

Redis 的数据库的整合在 java 里面提供的官方工具包:jedis,所以即便你现在使用的是 SpringBoot,那么也继续使用此开发包。

 

二、redidTemplate操作

在 Spring 支持的 Redis 操作之中提供有一个 RedisTemplate 处理程序类,利用这个类可以非常方便的实现 Redis 的各种基本数 据操作。

1、引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、配置yml

spring:  
  redis:
    host: 47.52.199.52
    port: 6379
    password: 123456
    timeout: 1000
    database: 0
    jedis:
      pool:
        max-active: 4
        max-idle: 8
        min-idle: 2
        max-wait: 100

3、使用示例

@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class DemoApplicationTests {    @Resource
    private RedisTemplate<String, String> redisTemplate;

    @Test
    public void testRedis(){
        redisTemplate.opsForValue().set("xing","12345678");
        System.out.println(redisTemplate.opsForValue().get("xing"));
    }

}

 三、配置多个Redis

  由于在项目的实际开发过程之中 Redis 的使用会非常的频繁, 那么就有可能出现这样一种问题:现在的项目里面要求连接两 个 Redis 数据库。SpringBoot 里面针对于 Redis 的连接配置本质上只提供有一个连接配置项,那么如果你真的需要进行更多的 Redis 的连接配置,那么就需要自己来进行 Redis 的创建管理了。相当于直接使用spring-data-redis。

1、引入依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

2、配置yml

spring:
    redis-two:
    host: 47.52.199.52
    port: 6379
    password: 123456
    timeout: 1000
    database: 0
    pool:
      max-active: 10
      max-idle: 8
      min-idle: 2
      max-wait: 100

3、初始化连接,创建实例

package com.example.demo.config.redisConfig;

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.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;


@Configuration
public class RedisTwoConfig {

    @Bean("redisTwo")
    public RedisTemplate<String, Object> getRedisTemplate(
            @Value("${spring.redis-two.host}") String hostName,
            @Value("${spring.redis-two.password}") String password,
            @Value("${spring.redis-two.port}") int port,
            @Value("${spring.redis-two.database}") int database,
            @Value("${spring.redis-two.pool.max-active}") int maxActive,
            @Value("${spring.redis-two.pool.max-idle}") int maxIdle,
            @Value("${spring.redis-two.pool.min-idle}") int minIdle,
            @Value("${spring.redis-two.pool.max-wait}") long maxWait) {

        System.out.println(hostName+port+password);
        RedisConnectionFactory factory = this.getRedisConnectionFactory(
                hostName, password, port, maxActive, maxIdle, minIdle, maxWait,
                database); // 建立Redis的连接
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(factory);
        redisTemplate.setKeySerializer(new StringRedisSerializer()); // key的序列化类型
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); // value的序列化类型
        return redisTemplate;
    }

    public RedisConnectionFactory getRedisConnectionFactory(String hostName,
                                                            String password, int port, int maxActive, int maxIdle, int minIdle,
                                                            long maxWait, int database) { // 是负责建立Factory的连接工厂类
        JedisConnectionFactory jedisFactory = new JedisConnectionFactory();
        jedisFactory.setHostName(hostName);
        jedisFactory.setPort(port);
        jedisFactory.setPassword(password);
        jedisFactory.setDatabase(database);
        JedisPoolConfig poolConfig = new JedisPoolConfig(); // 进行连接池配置
        poolConfig.setMaxTotal(maxActive);
        poolConfig.setMaxIdle(maxIdle);
        poolConfig.setMinIdle(minIdle);
        poolConfig.setMaxWaitMillis(maxWait);
        jedisFactory.setPoolConfig(poolConfig);
        jedisFactory.afterPropertiesSet(); // 初始化连接池配置
        return jedisFactory;
    }
}

4、使用示例

RedisTwoConfig.java

@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class RedisTest {
    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    @Resource(name = "redisTwo")
    private RedisTemplate<String, Object> redisTemplate2;

    @Test
    public void testRedis2(){
        UserPO userPO = new UserPO();
        userPO.setAge(25);
        userPO.setName("小明");
        userPO.setUid(111L);
        redisTemplate2.opsForValue().set("user25",userPO);
        UserPO result = (UserPO) redisTemplate2.opsForValue().get("user25");
        System.out.println(result);
    }
}

 

posted @ 2020-06-02 21:49  跃小云  阅读(5118)  评论(0编辑  收藏  举报