在spring-boot-data-redis上踩得坑

突然想体验一下用markdown写一下博客,果然还是应该有一颗追求新鲜事物的心哦。而且貌似作为一个程序员来说(伪程序员)来说,貌似熟悉一下markdown百利而无一害。

带着这样的心态,以极不严谨的操作,在spring-boot-data-redis上疯狂踩坑。
介绍一下,上面这个包spring-boot-data-redis整合springboot的时候,可以直接通过配置文件配置,而不用自己装配beans。原理的话是@SpringBootApplication 注解默认开启了@EnableAutoConfiguration,大家可以去查看源码。

1.第一个坑
都快被自己蠢哭了。 url要求是包含端口的完整访问连接,在这里由于是当前主机,应该用host : localhost。错误配置的结果就是springboot初始化数据源出错, 我在debug的时候一直认为是我的关系型数据库出错了, 在多次确认之后,又怀疑是lettuce(springboot 2.0以前默认redis连接池是jedis,springboot2.0以后就是lettuce)。蠢哭!

spring:
redis:
database: 0
#host:localhost
url: localhost
password: 260813
port: 6379
lettuce:
pool:
max-wait: -1ms
max-idle: 8
max-active: 8
min-idle: 0

2.第二个坑

静态注入:

private static MailEntity mailEntity;
@Autowired
private MailEntity mailEntityAutowired;
@PostConstruct
public void init(){
MaillUtil.mailEntity = mailEntityAutowired;
}
网上都差不都是这样的,但是不要忘记注入的本质是spring容器,所以要记住类头上添加@component注解。

3.第三个坑

在向redis添加数据的时候,抛出的错误。

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

通用的解决办法是:

连接redis-cli,运行config set stop-writes-on-bgsave-error no命令;
或者 设置配置文件配置项stop-writes-on-bgsave-error 为no 。

但是这就好像掩耳盗铃一样,redis还是无法持久化(快照存储),就是说每次关机数据就会清空,那是多么的恐怖呀,在这个数据就是金钱的时代。

我暂时还没有解决,记录一下:

echo ‘vm.overcommit_memory = 1’ >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1

https://www.linuxidc.com/Linux/2012-07/66079.htm
https://stackoverflow.com/questions/19581059/misconf-redis-is-configured-to-save-rdb-snapshots

4.第四个坑

我都快受不了自己了,到底是世界有意捉弄我,还是我心态不够好,解决到最后还遇到了一个空指针异常。
这里建议一下,遇到空指针异常,如果日志里没法找到空指针产生原因的话,直接打个断点debug,比起到处写sout代码来的快的多。

比较奇怪的是,在上一篇博客里面提到的java重载版本并不是‘唯一的’,往往只能确定一个“更加合适的“的版本。

public static ResultVo success(Integer code, String msg, T object){
ResultVo resultVo = new ResultVo();
resultVo.setCode(code);
resultVo.setMsg(msg);
resultVo.setData(object);
return resultVo;
}
public static ResultVo success(T object){
return success(200,“成功”,object);
}
public static ResultVo success(){
//在这里重载版本为下面的一个方法,而不是上面的方法,所以会抛出空指针异常
return success(null);
}
public static ResultVo success(ResultEnum resultEnum){
return success(resultEnum.getCode(),resultEnum.getMsg(),null);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来日可期1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值