怎么优化高并发的insert操作
1个回答
展开全部
不考虑一致性,或则业务上允许ehcache成功,但是最终落库失败的情况。可以这么搞。
如果业务上需要强一致性(告知用户成功,必须成功),可以考虑如下方案:
用户请求进来-->
拿令牌------>拿到令牌--->对blockingQueue拿等待操作的任务---->并发插入------>唤醒任务等待线程---->归还令牌
|
|
---->没拿到令牌--->将任务放到blockingQueue--->当前线程等待---------->被唤醒-->返回结果
使用这个方案,等待任务需要设置一个超时时间,如果在blockingQueue等待时间过长,则等待线程直接返回。然后对应的等待任务被拿出来执行的时候,直接忽略.
这样的逻辑,可以直接放在持久化层,对外层的业务不影响。
如果业务上需要强一致性(告知用户成功,必须成功),可以考虑如下方案:
用户请求进来-->
拿令牌------>拿到令牌--->对blockingQueue拿等待操作的任务---->并发插入------>唤醒任务等待线程---->归还令牌
|
|
---->没拿到令牌--->将任务放到blockingQueue--->当前线程等待---------->被唤醒-->返回结果
使用这个方案,等待任务需要设置一个超时时间,如果在blockingQueue等待时间过长,则等待线程直接返回。然后对应的等待任务被拿出来执行的时候,直接忽略.
这样的逻辑,可以直接放在持久化层,对外层的业务不影响。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询