美文网首页
Springboot集成redis的坑

Springboot集成redis的坑

作者: young十三 | 来源:发表于2019-07-16 17:38 被阅读0次

    一、问题

    1、使用redis工具类方法

        /**
         * 插入普通数据的同时设置过期时间
         *
         * @param key   数据的键
         * @param value 数据的值
         * @param time  数据的过期时间
         */
        public boolean set(String key, Object value, long time) {
            boolean setResult = false;
            try {
                if (key == null) {
                    logger.error("插入值出错: 键为空");
                } else if (value == null) {
                    logger.error("插入值出错: 值为空");
                } else if (time <= 0) {
                    logger.error("插入值出错: 有效期小于0");
                } else {
                    this.redisTemplate.opsForValue().set(key, value, time);
                    setResult = true;
                }
            } catch (Exception e) {
                logger.error("插入值出错:" + key, e);
            }
            return setResult;
        }
    

    2、在执行if语句代码时和预期相反

    String smsLoginCode = redisService.get(redisKey) + "";
    
    if (!verifyCode.equals(smsLoginCode)){
          return ResultResponse.getResultInfo(ResultEnum.ILLEGAL_VERITY_CODE);
    }
    

    debug发现smsLoginCode 发现有很多空格

    二、方案

    1、原因

    this.redisTemplate.opsForValue()使用了第三个set方法,意思是将value从指定的位置开始覆盖原有的值。如果指定的开始位置大于字符串长度,先补空格在追加。

    void set(K var1, V var2);
    void set(K var1, V var2, long var3, TimeUnit var5);
    void set(K var1, V var2, long var3);
    

    2、修改方法

         /**
         * 插入普通数据的同时设置过期时间
         *
         * @param key   数据的键
         * @param value 数据的值
         * @param time  数据的过期时间
         */
        public boolean set(String key, Object value, long time) {
            boolean setResult = false;
            try {
                if (key == null) {
                    logger.error("插入值出错: 键为空");
                } else if (value == null) {
                    logger.error("插入值出错: 值为空");
                } else if (time <= 0) {
                    logger.error("插入值出错: 有效期小于0");
                } else {
                    //修改
                    this.redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
                    setResult = true;
                }
            } catch (Exception e) {
                logger.error("插入值出错:" + key, e);
            }
            return setResult;
        }
    
    

    纸上得来终觉浅,绝知此事要躬行。

    相关文章

      网友评论

          本文标题:Springboot集成redis的坑

          本文链接:https://www.haomeiwen.com/subject/abgtlctx.html