缓存惹的祸
背景
项目A遇到某些条件的情况下需要把某些消息推送至项目B,推送方式跟项目B负责人约定好后采用httpclient方式;
数据库里有一张配置表专门来配置推送的url、appId等信息,配置好后开始开发。
过程
与项目B负责人约定好了推送模板后开始开发。这里为了提高响应速度,当项目A遇到某些条件下开始推送消息(采用线程的方式)
推送类有这几个部分组成:
-
定义ThreadPoolExecutor线程池
-
Redis缓存获取配置信息
-
推送消息方法
开发好后本地调试推送成功,响应成功。
测试&验证
项目打包部署至测试环境测试,发现日志中并没有线程推送的日志。当时怀疑是条件不等所以没有开始推送。看了入参日志是等于这个条件的。
缓存惹的祸
之后在推送方法前后用代码打印日志,重新部署测试,发现进入推送方法后就没有然后了。原因是因为推送配置一个都没有从数据库获取,全都从redis里面获取,而redis里面的配置少了我新增的几条推送配置(没有更新),所以相当于推送了个寂寞。
解决办法
-
推送方法里面获取url改成 config.getOrDefault("XXUrl",XXXXX),这样以后如果redis没有就使用默认的地址。
-
写了一个清除key的方法,每次有新增配置信息,点击清除key,这样第一次就会从数据库获取在放入redis。
-
由于目前配置新增都是手动sql插入数据库,最好是在平台上开发配置页面,每次新增修改都对redis进行修改等。