zoukankan      html  css  js  c++  java
  • 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字符串存储

  • 相关阅读:
    浏览器兼容模式下,上传文件问题
    计算机编程语言也是一种语言,认识的词汇越多越好
    localhost换成127.0.0.1和本机IP打不开本地项目了的问题
    mvc @html.action() 跨area调用controller 中的action
    windows server 2012 FTP连接报530 User 用户名 cannot log in home directory inaccessible的解决方法
    eCharts 数据转换json
    win10家庭版查看已连接wifi密码
    jequery动态创建form
    jsp 获取配置信息
    docker常用命令
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11451689.html
Copyright © 2011-2022 走看看