springmvc异步更新mysql数据库的实现方法?!

我这边有这样一个需求,通过IoT在100ms内采集到的数据生成500个insert或者update请求操作数据库,
我如何才能将这些请求从原方法中异步出来,并且进行批量操作?
有人跟我说用redis缓存来做,可是我查到的都是用redis来做批量读的,这个在读的时候成功了,但是还是没有解决写的问题

4个回答

给你提供思路
1.直接开启一个线程(Thread),让新线程来执行,就已经异步了;
2.自定义一个spring事件继承ApplicationEvent即可,然后在生成完语句后publish这个事件;
事件里面保存的就是你的语句或语句的引用,然后在处理事件的时候开启Async注解(spring)异步处理事件
3.将处理消息发送给消息队列,如kafka等;(适用于高并发场景)

如果业务量不大推荐使用第2种方式,业务量大使用第3种方式;
希望能够帮到你...

w172087242
little_how 回复way625920697: 可以,但没必要,要办到你的要求,有很多种办法,选一种适用和容易实现的方式就可以
一年多之前 回复
way625920697
山丨海 我想问下,这种方法实现起来的话是不是用spring batch也可以做?刚刚翻spring的产品介绍里翻到了这个
一年多之前 回复
w172087242
little_how 回复way625920697: 当本地吞吐量不够的时候,就必须加上外部消息队列了
一年多之前 回复
w172087242
little_how 回复way625920697: 还有就是你的这个需要加上本地任务队列ArrayBlockingQueue,这样任务也解耦出来了
一年多之前 回复
way625920697
山丨海 好的,我下午试试,不懂得再请教你
一年多之前 回复
w172087242
little_how 回复way625920697: 如果需要异步只需要在onApplicationEvent上加上Async就行,因为我示例是需要关联事务,所以没有做异步处理
一年多之前 回复
w172087242
little_how 回复way625920697: spring事件你需要了解一下,https://blog.csdn.net/w172087242/article/details/79847998面有用到spring事件,你可以看看,不明白的问我,事件的发送在https://github.com/littlechare/job-manager/blob/master/job-dispatcher-manager/src/main/java/com/littlehow/job/manager/support/MysqlTaskManagerSupport.java,事件的处理是在https://github.com/littlechare/job-manager/blob/master/job-dispatcher-biz/src/main/java/com/littlehow/job/listener/TaskEventListener.java,有不了解的可以继续问
一年多之前 回复
way625920697
山丨海 框架用的ssm,就是希望通过第二种方式把spring里面的service层给异步处理下
一年多之前 回复
way625920697
山丨海 第二种方法可以在详细点说下吗?第一种我在主业务处理的时候用了,现在的问题是在主业务处理的线程里还需要进行写操作,想把这个给提取出来
一年多之前 回复

我觉得要不试试队列?把请求放到队列里面,采用延时(或者多个队列)等方式,到时间后操作队列里的数据

我这也有个思路。

用Redis或者active mq。

nio(你应该用了mina,netty这类工具吧)那边收到数据后,直接把decode后的数据放入线程队列(写入redis或者发送到activemq那边)。

然后再做一个程序,作为消费者,订阅(Redis里有个lock方法可以形成类似订阅的效果)。

订阅的这边再去做插入和更新。

可以看看spring boot一类的微服务,可以比较方便的实现这个思路。

而且只要接受的活着,就能始终接受输入。

订阅可以启动好几个,分布在不同的机器或者虚拟机里,还能降低死锁的概率。

way625920697
山丨海 还有我这边从mina接收这部分虽然没用redis,但是也是自己用线程实现了几个简化的消息队列,效率比远程调用稍微好点(不通用),然而我现在的需求相当于是订阅这边更新数据库的操作要提取出来,异步来做
一年多之前 回复
way625920697
山丨海 用springcloud做微服务是不是成本有点高了= =
一年多之前 回复

Redius 吧 楼上说的还是比较清楚的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问