真诚向各位大佬请教!!!


面试过程中被问到了一个问题:

非分布式并发情况下如何解决数据一致性?


举个栗子:
如果两个医生开同一种药,同时读到此时库存数量为10,怎么去减这个库存?

似乎就是超卖问题,可是我这个业务场景并没有那么高的并发量,感觉秒杀系统那一套用不上
所以想问一下各位大佬针对这个业务场景最优的解决方案应该怎么做!
#Java#
全部评论
进群https://w.url.cn/s/AVjcpS5和大家一起交流呀~~
点赞 回复 分享
发布于 2021-04-02 00:21
查库存和减库存放一个事物查库存的时候for update锁掉,这种是悲观实现,或者更新的时候set 库存-1 where  id=id and 库存!=0,然后获取更新数量,判断成功与否
点赞 回复 分享
发布于 2021-03-28 20:25
单机直接用java的锁,或者在mysql查询库存的时候加上for update,比如,select 库存 from 表名 for update,这种方式构建的是悲观锁,或者也可以用乐观锁去实现,对于超卖的化,就是减库存的时候,可以update 表名 set 库存 = 库存 - 购买量 where 库存 >= 购买量
点赞 回复 分享
发布于 2021-03-27 17:25
非分布式的话,就是单机条件的锁。你可以使用Java的那一套锁机制(Synchronized、Lock、voliate)或者数据库层面使用锁(LBCC、MVCC),具体的实现方法可以去搜搜,但一般来说,面试的话,应该会说就可以了吧。
点赞 回复 分享
发布于 2021-03-26 17:11
非分布式并发是指单体应用?多线程的话,Synchronized互斥或者AtomicInteger做CAS?或者spring事务?
点赞 回复 分享
发布于 2021-03-23 19:19

相关推荐

迷茫的大四🐶:干脆大厂搞个收费培训得了,这样就人均大厂了
点赞 评论 收藏
分享
notbeentak...:孩子,说实话,选择很重要,可能你换一个方向会好很多,但是现在时间不太够了,除非准备春招
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务