Redis中设置增量缓存,减少对数据库的交互查询;启动@Async;异步线程

//当属于这个分支的报文传入调用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);
    }
}
posted @ 2024-07-11 09:51  爱豆技术部  阅读(12)  评论(0编辑  收藏  举报
TOP