//当属于这个分支的报文传入调用processMessage方法
if ((new JSONObject(dataMessage).optString("documentStatus")).equals("carWeizi_redis_service"))
{
processMessage(dataMessage);
}
//processMessage 中先把增量数据插入数据库,同时缓存redis
public void processMessage(String dataMessage) {
JSONObject jsonObject = new JSONObject(dataMessage);
if ("carWeizi_redis_service".equals(jsonObject.optString("documentStatus"))) {
CcmdbCarWeizi newRecord = recordStorage.ccmdbCarWeizi(dataMessage);
int carWeizi = carWeiziMapper.insertCcmdbCarWeizi(newRecord);
if (carWeizi > 0) {
updateCacheAsync(newRecord);
}
}
}
//updateCacheAsync 中启动的异步 @Async处理redis缓存,防止阻塞线程
//把新传入的数据 newRecord 放到carWeiziList中,实现增量;setCacheObject插入redis,不去重新调取mysql,减少对数据库性能的侵蚀
@Async
public void updateCacheAsync(CcmdbCarWeizi newRecord) {
List<CcmdbCarWeizi> carWeiziList = (List<CcmdbCarWeizi>) redisService.getCacheObject("carWeizi_redis_service");
if (carWeiziList != null) {
// 添加新的记录到列表
carWeiziList.add(newRecord);
// 更新缓存
redisService.setCacheObject("carWeizi_redis_service", carWeiziList);
} else {
// 如果缓存中没有数据,执行全量查询并更新缓存
List<CcmdbCarWeizi> alldata = carWeiziMapper.selectCcmdbCarWeiziList(new CcmdbCarWeizi());
redisService.setCacheObject("carWeizi_redis_service", alldata);
}
redisService.expire("carWeizi_redis_service", 1, TimeUnit.MINUTES);
}
对启动类开启异步线程,我这里服务较多,只需加入 @Configuration 和@EnableAsync注解
@EnableCustomConfig
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
@Configuration
@EnableAsync
public class MuShuMqttsApplication
{
public static void main(String[] args)
{
SpringApplication.run(MuShuMqttsApplication.class, args);
}
}