Springboot集成redis的坑
2019-07-16 本文已影响0人
young十三
一、问题
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;
}
纸上得来终觉浅,绝知此事要躬行。