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);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM