【已解决】 【博客系统】redis存int数据问题
在存Integer类型数据的时候报错Integer不能转换成String。错误截图如下

出错行数UserServiceImpl.java 195的内容为
redisUtil.set(Constants.User.KEY_EMAIL_SEND_IP + remoteAddr, ipSendTime, 60 * 60);
其中ipSendTime的类型为Integer。我尝试了如果把ipSendTime转换成String就不会报这个错,但是set的value不是Object类型吗?为什么不能存int值呢?
完整代码:
public ResponseResult sendEmail(HttpServletRequest request, String emailAddress) {
//1 防止暴力发送(不断发送)。同一个邮箱间隔要超过30s,同一个IP最多发10次(短信5次)
String remoteAddr = request.getRemoteAddr();
log.info("sendEmail == > ip == >" + remoteAddr);
if (remoteAddr != null) {
remoteAddr=remoteAddr.replaceAll(":","-");
}
Integer ipSendTime = (Integer) redisUtil.get(Constants.User.KEY_EMAIL_SEND_IP + remoteAddr);
;
log.info("ipsendtime==>"+ipSendTime);
if (ipSendTime != null && ipSendTime > 10) {
return ResponseResult.FAILED("发送验证码过于频繁1");
}
Object hasEmailSend = redisUtil.get(Constants.User.KEY_EMAIL_SEND_ADDRESS + emailAddress);
if (hasEmailSend != null ) {
return ResponseResult.FAILED("发送验证码过于频繁2");
}
//2 检查邮箱地址是否正确
boolean isEmailFormatOk = TextUtils.isEmailAddressValid(emailAddress);
if (!isEmailFormatOk) {
return ResponseResult.FAILED("邮箱地址不正确");
}
//3 发送验证码6位数100000-999999
int code = random.nextInt(999999);
if (code < 100000) {
code += 100000;
}
log.info("sendEmail code == > " + code);
// try {
// taskService.sendEmailVerifyCode(code+"",emailAddress);
// } catch (MessagingException e) {
// return ResponseResult.FAILED("验证码发送失败,请稍后重试");
// }
//4 做记录 发送记录和code
if (ipSendTime == null) {
ipSendTime = 0;
}
ipSendTime++;
//一小时有效期
redisUtil.set(Constants.User.KEY_EMAIL_SEND_IP + remoteAddr, ipSendTime, 60 * 60);
redisUtil.set(Constants.User.KEY_EMAIL_SEND_ADDRESS + emailAddress, "true", 30);
//保存code
redisUtil.set(Constants.User.KEY_EMAIL_CODE_CONTENT, code+"", 60 * 10);
return ResponseResult.SUCCESS("验证码发送成功");
}
在后面的课程会对这个进行修复。
存的时候改string了。
自我破案了
是因为存取数据乱码的问题,然后我对RedisTemplate进行了配置
在这里把value设置成String了。
但是如果不对key和value进行处理,我用的idea里面的Iedis插件看不了数据。求更优解答?