java springboot 初体验 (四)对接redis

  1. 上一篇
    1. java springboot 初体验 (三) 提供一个新接口
    2. https://www.cnblogs.com/zwjvzwj/p/16599958.html
  2. pom文件添加依赖包
    1.   添加redis依赖包
              <!-- Spring提供的Redis Client,用于操作Redis的依赖库 -->
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-data-redis</artifactId>
              </dependency>
      

       

    2.  添加lombok包,和redis没有关系,只是项目用着会更加方便
      1.         <!-- Lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具。 -->
                <!-- 常用注解     说明
                    @Getter/@Setter     此注解在属性或类上,可以为相应的属性自动生成 Getter/Setter 方法,还可以指定访问范围
                    @ToString     类使用此注解,生成toString()方法
                    @EqualsAndHashCode     用在类上,生成hashCode()和equals()方法
                    @Data     注解在类上, 相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor这些注解
                    @NonNull     用在属性或构造器上,对参数是否为空检查
                    @NoArgsConstructor     生成无参构造函数
                    @RequiredArgsConstructor     生成不为空的构造函数
                    @AllArgsConstructor     生成全参构造函数
                    @Value     用在类上,是@Data的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法
                    @Builder     表示可以进行生成器模式(Builder Pattern)方式初始化
                -->
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                    <version>1.18.22</version>
                </dependency>

         

    3.  
  3.   配置文件中添加redis配置
    1. spring:
      profiles:
      active: local # 多环境配置参数
      application:
      name: zwj-project
      redis:
      host: 127.0.0.1
      port: 6379
      password: moka@1234
      database: 0 #操作的是0号数据库
      jedis:
      #Redis连接池配置
      pool:
      max-active: 8 #最大连接数
      max-wait: 1ms #连接池最大阻塞等待时间
      max-idle: 4 #连接池中的最大空闲连接
      min-idle: 0 #连接池中的最小空闲连接

       

    2.  
  4.   添加一个util工具类,封装redis的各种方法
    1. @Slf4j
      @Component
      public class StringRedisTemplateUtil {

      @Resource
      public StringRedisTemplate stringRedisTemplate;

      /**
      * @apiNote set string to redis
      * @param redisKey redisKey
      * @param redisValue redisValue
      * @param expire expire
      */
      public void setString(String redisKey, String redisValue,Long expire) {
      try {
      // 向redis里存入数据和设置缓存时间
      stringRedisTemplate.opsForValue().set(redisKey, redisValue,expire, TimeUnit.SECONDS);
      } catch (Exception e) {
      log.error("StringRedisTemplateUtil setString catch error msg={}", e.getMessage(), e);
      }
      }

      /**
      * @apiNote 根据key获取缓存中的val
      * @param redisKey redisKey
      * @return redisValue
      */
      public String getString(String redisKey) {
      try {
      return stringRedisTemplate.opsForValue().get(redisKey);
      } catch (Exception e) {
      log.error("StringRedisTemplateUtil getString catch error msg={}", e.getMessage(), e);
      }
      return null;
      }

      }

       

    2.  
  5.   使用封装的redis
    1. package com.zwj.zwjproject.controller.outer;

      import com.zwj.zwjproject.dto.TestApiRespDTO;
      import com.zwj.zwjproject.utils.StringRedisTemplateUtil;
      import lombok.extern.slf4j.Slf4j;
      import org.springframework.util.ObjectUtils;
      import org.springframework.web.bind.annotation.PostMapping;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;

      import javax.annotation.Resource;


      @Slf4j @RestController @RequestMapping(value
      = "/outer/test") public class TestOuterController { @Resource private StringRedisTemplateUtil stringRedisTemplateUtil; @PostMapping(value = "/testRedis") public TestApiRespDTO testRedis() { try { stringRedisTemplateUtil.setString("a", "第一次redis测试", (long) 3600); String a = stringRedisTemplateUtil.getString("a"); return new TestApiRespDTO() .setCode(0) .setRedisValue(a); } catch (Exception e) { System.out.println("catch error"); log.info("TestOuterController testApi catch error msg={}", e.getMessage(), e); return new TestApiRespDTO() .setCode(-1); } } }
    2.  
  6.   postman请求

    1.  

  7.   做一个统一的返回

    1.   目标

      1. 成功时:code:0 msg:success

      2.   失败时:code:-1或者其他

    2.   建一个返回code码枚举类。也可以用其他的方式
      1. package com.zwj.zwjproject.enums;
        
        /**
         * @ClassName: RespEnum
         * @Author zhangwujie
         * @Date 2022/8/19 2:29 下午
         * @Description:
         */
        public enum RespEnum {
            SUCCESS(0, "success"),
            FAIL(-1, "fail");
        
            private Integer code;
            private String msg;
        
            RespEnum(Integer code, String msg) {
                this.code = code;
                this.msg = msg;
            }
            public Integer getCode() {
                return code;
            }
            public String getMsg() {
                return msg;
            }
        }
    3.   封装一个返回值
      1. package com.zwj.zwjproject.result;
        
        import com.zwj.zwjproject.constant.RespConstant;
        import com.zwj.zwjproject.enums.RespEnum;
        import lombok.Data;
        
        import java.io.Serializable;
        
        /**
         * @ClassName: RespEntity
         * @Author zhangwujie
         * @Date 2022/8/19 11:27 上午
         * @Description:
         */
        @Data
        public class RespEntity<T> implements Serializable {
            private Integer code;
            private String msg;
            private T data;
        
            /**
             * 接口成功
             * @param code code
             * @param msg msg
             * @param data data
             * @param <T> <T>
             * @return RespEntity<T>
             */
            public static <T> RespEntity<T> success(Integer code, String msg, T data) {
                RespEntity<T> respEntity = new RespEntity<>();
                respEntity.setCode(code);
                respEntity.setMsg(msg);
                respEntity.setData(data);
                return respEntity;
            }
            /**
             * 接口成功
             * @param msg msg
             * @param data data
             * @param <T> <T>
             * @return RespEntity<T>
             */
            public static <T> RespEntity<T> success(String msg, T data) {
                RespEntity<T> respEntity = new RespEntity<>();
                respEntity.setCode(RespConstant.SUCCESS);
                respEntity.setMsg(msg);
                respEntity.setData(data);
                return respEntity;
            }
            /**
             * 接口成功
             * @param msg msg
             * @return RespEntity<T>
             */
            public static <T> RespEntity<T> success(String msg) {
                RespEntity<T> respEntity = new RespEntity<>();
                respEntity.setCode(RespConstant.SUCCESS);
                respEntity.setMsg(msg);
                respEntity.setData(null);
                return respEntity;
            }
            /**
             * 接口成功
             * @param <T> <T>
             * @return RespEntity<T>
             */
            public static <T> RespEntity<T> success(T data) {
                RespEntity<T> respEntity = new RespEntity<>();
                respEntity.setCode(RespEnum.SUCCESS.getCode());
                respEntity.setMsg(RespEnum.SUCCESS.getMsg());
                respEntity.setData(data);
                return respEntity;
            }
            /**
             * 接口成功
             * @return RespEntity<T>
             */
            public static <T> RespEntity<T> success() {
                RespEntity<T> respEntity = new RespEntity<>();
                respEntity.setCode(RespEnum.SUCCESS.getCode());
                respEntity.setMsg(RespEnum.SUCCESS.getMsg());
                respEntity.setData(null);
                return respEntity;
            }
        
            /**
             * 接口失败
             * @param code code
             * @param msg msg
             * @param data data
             * @param <T> <T>
             * @return RespEntity<T>
             */
            public static <T> RespEntity<T> fail(Integer code, String msg, T data) {
                RespEntity<T> respEntity = new RespEntity<>();
                respEntity.setCode(code);
                respEntity.setMsg(msg);
                respEntity.setData(data);
                return respEntity;
            }
            /**
             * 接口失败
             * @param code code
             * @param msg msg
             * @param <T> <T>
             * @return RespEntity<T>
             */
            public static <T> RespEntity<T> fail(Integer code, String msg) {
                RespEntity<T> respEntity = new RespEntity<>();
                respEntity.setCode(code);
                respEntity.setMsg(msg);
                respEntity.setData(null);
                return respEntity;
            }
            /**
             * 接口失败
             * @param msg msg
             * @return RespEntity<T>
             */
            public static <T> RespEntity<T> fail(String msg) {
                RespEntity<T> respEntity = new RespEntity<>();
                respEntity.setCode(RespEnum.FAIL.getCode());
                respEntity.setMsg(msg);
                respEntity.setData(null);
                return respEntity;
            }
            /**
             * 接口失败
             * @return RespEntity<T>
             */
            public static <T> RespEntity<T> fail() {
                RespEntity<T> respEntity = new RespEntity<>();
                respEntity.setCode(RespEnum.FAIL.getCode());
                respEntity.setMsg(RespEnum.FAIL.getMsg());
                respEntity.setData(null);
                return respEntity;
            }
        }
        View Code
    4.   修改获取redis的返回值

      1.   使用RespEntity.success和RespEntity.fail代表成功和失败

      2.     @PostMapping(value = "/testRedis")
            public RespEntity<TestApiRespDTO> testRedis() {
                try {
                    stringRedisTemplateUtil.setString("a", "第一次redis测试", (long) 3600);
                    String a = stringRedisTemplateUtil.getString("a");
                    TestApiRespDTO testApiRespDTO = new TestApiRespDTO()
                            .setRedisValue(a);
                    return RespEntity.success(testApiRespDTO);
                } catch (Exception e) {
                    log.info("TestOuterController testApi catch error msg={}", e.getMessage(), e);
                    return RespEntity.fail(e.getMessage());
                }
            }
      3.  
  8. 下一篇
    1.   java springboot 初体验 (五)对接apollo
    2. https://www.cnblogs.com/zwjvzwj/p/16600079.html
posted @ 2022-08-19 17:54  zwjvzwj  阅读(120)  评论(0编辑  收藏  举报