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

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

时间:2024-07-11 09:52:27浏览次数:9  
标签:newRecord 缓存 service carWeizi Redis redis 线程 Async dataMessage

//当属于这个分支的报文传入调用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);
    }
}

标签:newRecord,缓存,service,carWeizi,Redis,redis,线程,Async,dataMessage
From: https://www.cnblogs.com/188221creat/p/18295456

相关文章

  • lazarus 线程1
    标准线程用法TypeTAnalyzedataThread=class(TThread)privateprocedureDoProcedure;protectedprocedureExecute;override;publicConstructorCreate(CreateSuspended:boolean);end;constructorTAnalyzedataThread.Create(CreateSuspended:boolean);beginFree......
  • RedisTemplate 中序列化方式辨析
    在SpringDataRedis中,RedisTemplate是操作Redis的核心类,它提供了丰富的API来与Redis进行交互。由于Redis是一个键值存储系统,它存储的是字节序列,因此在使用RedisTemplate时,需要指定键(Key)和值(Value)的序列化方式。不同的序列化方式适用于不同的场景。下面将详细介绍几种序列......
  • redis 5 安装配置以及脚本
     redis6.2安装配置以及脚本(147)  wgethttp://download.redis.io/releases/redis-6.2.14.tar.gz tar-xfredis-5.0.10.tar.gz-C/usr/local/ cd/usr/local/redis-5.0.10&&make ...... vimredis.conf daemonizeyesbind127.0.0.1192.168.1.252 ......
  • 实战篇——SSRF漏洞Redis反弹shell实战
    实战篇——SSRF漏洞Redis反弹shell实战SSRF之Redis实战上一章中利用file伪协议实现了内网的主机探测,发现存在192.168.118.151,对其进行端口探测:可见开放了6379端口,结合响应判断为Redis服务。而Redis存在未授权访问漏洞,可以利用该漏洞实现信息泄露、数据删除以及反弹shell,下面......
  • redis-benchmark压力测试
    01测试-redis-benchmark压力测试redis自带有redis-benchmark工具做压力测试,经常用来测试新版本,新特性对基准测试性能的影响。参数场景变化下的性能状况。主要参数: -h<hostname>   服务器地址(default127.0.0.1) -p<port>     端口(default6379) -s<so......
  • java Redission 分布式锁的使用
    在微服务的场景下,一个应用会部署多个实例,在一些业务场景中,需要保证同一时间多个线程只能有一个线程操作资源,分布式锁可以实现这一需求。JAVA中,Redission分布式锁是基于Redis实现的分布式锁,使用简单,只需要关注业务场景和使用到的接口即可。引入依赖<!--https://mvnreposito......
  • JAVA高级之线程池
    线程的状态(6种)线程状态具体含义NEW一个尚未启动的线程的状态。也称之为初始状态、开始状态。线程刚被创建,但是并未启动。还没调用start方法。MyThreadt=newMyThread()只有线程象,没有线程特征。RUNNABLE当我们调用线程对象的start方法,那么此时线程对象进入了RUNNABLE状态。......
  • Redis是单线程还是多线程的?
    讲Redis是单线程还是多线程的需要根据redis各版本的一个变化,在Redis的老版本中,redis是单线程的,redis的数据处理读写命令都是由一个线程完成,并且速度很快,是因为redis的数据都是存储在内存中的,避免了磁盘I/O的瓶颈,有通过非阻塞IO和事件驱动模型,使得单线程依旧可以处理大量的数据......
  • Java Executors类的9种创建线程池的方法及应用场景分析
    在Java中,Executors类提供了多种静态工厂方法来创建不同类型的线程池。在学习线程池的过程中,一定避不开Executors类,掌握这个类的使用、原理、使用场景,对于实际项目开发时,运用自如,以下是一些常用的方法,来一一细说:newCachedThreadPool():创建一个可缓存的线程池,如果线程池中......
  • 你真的懂多线程吗?多线程 并行处理 CPU 操作系统
    了解多线程、并行处理首先需要了解什么CPU、CPU核数、操作系统CPU物理数即电脑拥有的物理CPU数量,普通电脑一般只有一个CPU插槽,也就是只有一个物理CPU。我们日常说的CPU,就是指封装好的一个物理CPU,作为商品进行售卖。但在编程讨论时,某些情况下,我们说的CPU含义又是指其中一个运算......