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字符串存储

posted @ 2019-09-03 10:53  Zs夏至  阅读(2960)  评论(0编辑  收藏  举报