springboot配置redis

Posted zs-book1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot配置redis相关的知识,希望对你有一定的参考价值。

在springboot中,默认继承好了一套完好的redis包,可以直接使用,但是如果使用中出了错不容易找到错误的原因,因此这里使用自己配置的redis;

需要使用的三个主要jar包:

技术图片
<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
<dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
        </dependency>
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
View Code

使用spring-boot-configuration-processor包主要是用来配置加载文件

package com.zs.springboot.config.redis;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @Company
 * @Author Zs
 * 将这个类作为spring的一个组件,添加@ConfigurationProperties(prefix = "spring.redis")注解,就会默认从application.properties
 * 文件中加载前缀为spring.redis的配置信息,配置文件中的配置字段与该类中的属性一致,通过setter方法来设值
 * @Date Create in 2019/8/30
 **/
@Component
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties 

    private String ip;
    private Integer[] ports;
    private Integer maxActive;
    private Integer maxWait;
    private Integer expire;

    public String getIp() 
        return ip;
    

    public void setIp(String ip) 
        this.ip = ip;
    

    public Integer[] getPorts() 
        return ports;
    

    public void setPorts(Integer[] ports) 
        this.ports = ports;
    

    public Integer getMaxActive() 
        return maxActive;
    

    public void setMaxActive(Integer maxActive) 
        this.maxActive = maxActive;
    

    public Integer getMaxWait() 
        return maxWait;
    

    public void setMaxWait(Integer maxWait) 
        this.maxWait = maxWait;
    

    public Integer getExpire() 
        return expire;
    

    public void setExpire(Integer expire) 
        this.expire = expire;
    

在application中配置redis:

技术图片

 

 然后配置redis的配置类,使用jdisCluster来操作redis:

package com.zs.springboot.config.redis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

import java.util.HashSet;
import java.util.Set;

/**
 * @Company
 * @Author Zs
 * @Date Create in 2019/8/30
 **/
@Configuration
public class RedisConfiguration 
    private RedisProperties redisProperties;

    public RedisConfiguration(RedisProperties redisProperties) 
        this.redisProperties = redisProperties;
    

    @Bean
    public JedisCluster jedisCluster() 
        Integer[] ports = redisProperties.getPorts();
        String host = redisProperties.getIp();
        Set<HostAndPort> hostAndPortSet = new HashSet<>();
        for (Integer port : ports) 
            hostAndPortSet.add(new HostAndPort(host, port));
        
        return new JedisCluster(hostAndPortSet, redisProperties.getMaxActive(), redisProperties.getMaxWait());
    

编辑redis的增删该方法:

/**
 * @Company
 * @Author Zs
 * @Date Create in 2019/8/28
 **/
@Service
public class RedisService 

    @Autowired
    private JedisCluster jedisCluster;
    private static final String SET_SUCCESS = "OK";

    /**
     * 添加string数据,成功返回code:200,失败code:404
     * @param key
     * @param value
     * @return
     */
    public Map<String, Object> set(String key, Object value) 
        Map<String, Object> map = new HashMap<>();
        String result = jedisCluster.set(key, JsonUtil.toJsonString(value));
        if (SET_SUCCESS.equals(result)) 
            map.put(Status.SUCCESS.getCodeName(), Status.SUCCESS.getCode());
         else 
            map.put(Status.FILED.getCodeName(), Status.FILED.getCode());
        
        return map;
    

    /**
     * 从redis根据key获取string数据
     * @param key
     * @return
     */
    public String get(String key) 
        String jsonString = jedisCluster.get(key);
        if (jsonString==null || jsonString.equals("")) 
            return null;
        
        return jsonString;
    

    /**
     * 删除string数据
     * @param key
     * @return
     */
    public Map<String, Object> del(String key) 
        Map<String, Object> map = new HashMap<>();
        Long del = jedisCluster.del(key);
        if (del>0) 
            map.put("code", 200);
         else 
            map.put("code", 404);
        
        return map;
    

    /**
     * 设置失效时间
     * @param key
     * @param seconds
     * @return
     */
    public Long expire(String key,Integer seconds) 
        return jedisCluster.expire(key, seconds);
    

注意不能在service层中注入service,如果需要可以在controller层将redisService做为参数传递进去,如果在service层中注入其他的service对象,可能造成事务的串联,读到脏数据。

该方法需要使用到jsonUtil类,将数据转为json字符串存储

以上是关于springboot配置redis的主要内容,如果未能解决你的问题,请参考以下文章

springboot配置文件注解

SpringBoot——SpringBoot入门SpringBoot的自动配置配置文件和开发小技巧

springboot指定配置文件运行

SpringBoot SpringBoot 配置

springboot自动配置

springboot配置fastjson