35 SpringBoot与Redis整合

版权声明:看什么?6,你和我,走一波! https://blog.csdn.net/qq_31323797/article/details/85336522

1 引入依赖

<!-- Redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

2 配置文件

#配置所有的数据源
spring:

  #Redis
  redis:
    host: 127.0.0.1
    port: 6379
    timeout: 5000
    jedis:
      pool:
        #最大连接数
        max-active: 8
        #最大阻塞等待时间(负数表示没限制)
        max-wait: -1
        #最大空闲
        max-idle: 8
        #最小空闲
        min-idle: 0

3 Redis配置

package com.gp6.springboot30.config;

import com.gp6.springboot30.utils.RedisUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Redis配置
 *
 * @author gp6
 * @date 2018-12-28
 */
@Configuration
@PropertySource("classpath:/application.yml")
public class RedisConfig {


    @Value("${spring.redis.host}")
    private String redisHost;

    @Value("${spring.redis.port}")
    private Integer redisPort;

    @Value("${spring.redis.timeout}")
    private Integer redisTimeout;

    @Value("${spring.redis.jedis.pool.max-active}")
    private Integer jedisPoolMaxActive;

    @Value("${spring.redis.jedis.pool.max-wait}")
    private Integer jedisPoolMaxWait;

    @Value("${spring.redis.jedis.pool.min-idle}")
    private Integer jedisPoolMinIdle;

    @Value("${spring.redis.jedis.pool.max-idle}")
    private Integer jedisPoolMaxIdle;

    /**
     * Jedis连接池配置
     *
     * @return JedisPoolConfig
     */
    @Bean
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // 最大空闲数
        jedisPoolConfig.setMaxIdle(jedisPoolMaxIdle);
        // 连接池的最大数据库连接数
        jedisPoolConfig.setMaxTotal(jedisPoolMaxActive);
        // 最大建立连接等待时间
        jedisPoolConfig.setMaxWaitMillis(jedisPoolMaxWait);
        return jedisPoolConfig;
    }

    /**
     * jedis连接工厂
     *
     * @param jedisPoolConfig Jedis连接池配置
     * @return RedisConnectionFactory
     */
    @Bean
    public RedisConnectionFactory redisConnectionFactory(JedisPoolConfig jedisPoolConfig) {
        // 单台redis
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        // IP地址
        redisStandaloneConfiguration.setHostName(redisHost);
        // 端口号
        redisStandaloneConfiguration.setPort(redisPort);
        // 默认使用的数据库
        redisStandaloneConfiguration.setDatabase(0);
        // 密码
        // redisStandaloneConfiguration.setPassword(password);

        JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration.builder();

        jpcb.poolConfig(jedisPoolConfig);
        JedisClientConfiguration jedisClientConfiguration = jpcb.build();
        return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
    }

    /**
     * @param redisConnectionFactory redis连接工厂
     * @return RedisTemplate
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        initRedisTemplate(redisTemplate, redisConnectionFactory);
        return redisTemplate;
    }

    /**
     * 设置数据存入 redis 的序列化方式,并开启事务
     *
     * @param redisTemplate 模板
     * @param factory       redis连接工厂
     */
    private void initRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
        // 开启事务
        redisTemplate.setEnableTransactionSupport(true);
        redisTemplate.setConnectionFactory(factory);
    }

    /**
     * @param redisTemplate 模板
     * @return RedisUtil
     */
    @Bean(name = "redisUtil")
    public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {
        RedisUtil redisUtil = new RedisUtil();
        redisUtil.setRedisTemplate(redisTemplate);
        return redisUtil;
    }
}

4 Redis工具类

package com.gp6.springboot30.utils;

import com.gp6.springboot30.enums.RedisKeyEnum;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.Objects;
import java.util.concurrent.TimeUnit;

/**
 * Redis工具类
 *
 * @author gp6
 * @date 2018-12-28
 */
public class RedisUtil {
    private RedisTemplate<String, Object> redisTemplate;

    public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    /**
     * 执行set操作
     *
     * @param redisKeyEnum Redis中的key枚举
     * @param value        Redis中的key
     * @return boolean
     */
    public boolean set(RedisKeyEnum redisKeyEnum, String value) {
        try {
            redisTemplate.opsForValue().set(redisKeyEnum.getKey(), value);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 执行set操作并且设置生存时间,单位为:秒
     *
     * @param redisKeyEnum Redis中的key枚举
     * @param value        Redis中的value
     * @param seconds      有效时间
     * @return boolean
     */
    public boolean set(RedisKeyEnum redisKeyEnum, String value, Integer seconds) {
        try {
            if (seconds > 0) {
                redisTemplate.opsForValue().set(redisKeyEnum.getKey(), value, seconds, TimeUnit.SECONDS);
            } else {
                set(redisKeyEnum, value);
            }
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 执行get操作
     *
     * @param redisKeyEnum Redis中的key枚举
     * @return String
     */
    public String get(RedisKeyEnum redisKeyEnum) {
        return Objects.requireNonNull(redisTemplate.opsForValue().get(redisKeyEnum.getKey())).toString();
    }

    /**
     * 执行删除操作
     *
     * @param redisKeyEnum Redis中的key枚举
     * @return boolean
     */
    public boolean delete(RedisKeyEnum redisKeyEnum) {
        return redisTemplate.delete(redisKeyEnum.getKey());
    }

    /**
     * 设置生存时间,单位为:秒
     *
     * @param redisKeyEnum Redis中的key枚举
     * @param seconds 生存时间
     * @return boolean
     */
    public boolean expire(RedisKeyEnum redisKeyEnum, Integer seconds) {
        try {
            if (seconds > 0) {
                redisTemplate.expire(redisKeyEnum.getKey(), seconds, TimeUnit.SECONDS);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

5 Redis的key统一放入

package com.gp6.springboot30.enums;

/**
 * Redis key
 *
 * @author gp6
 * @date 2018-12-28
 */
public enum RedisKeyEnum {
    /**
     * Redis定义key的规则:项目名_模块名_业务名
     */
    KEY("KEY", "Redis的Key");


    RedisKeyEnum(String key, String desc) {
        this.key = key;
        this.desc = desc;
    }

    private String key;

    private String desc;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }}

6 测试

package com.gp6.springboot30;

import com.gp6.springboot30.enums.RedisKeyEnum;
import com.gp6.springboot30.utils.RedisUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot30ApplicationTests {

    @Autowired
    private RedisUtil redisUtil;

    @Test
    public void contextLoads() {
        redisUtil.set(RedisKeyEnum.KEY,"23");
    }

}


猜你喜欢

转载自blog.csdn.net/qq_31323797/article/details/85336522
35