nodejs
场景:
a,b购买c的产品,a,b各自扣除10,c加20,但是并发下各自读了c余额,
然后a给c100+10=110,b一样,覆盖写了,实际应当是120,结果是110
方案
- 乐观锁(暂时没实现)
- 队列(用此,缓存队列,顺序执行各种任务)
问题
现在采用了顺序执行任务队列.
- 可能有某些情况导致超时(假设设置了3秒),目前超时会执行下个任务,但是原任务还会继续执行
不设置又可能一直阻塞
设置了超时可能还会引起并发问题,
函数1执行,读了db余额100,然后超时函数2开始执行,也读了100,此时函数1继续执行,所以还是有问题
如何解决此问题- 超时关掉上个任务不往下执行?实现思路
- 超时关掉移除,排到后面执行?
- 由于此类关联太多,队列太长,是否改换乐观锁,或者有什么更好的方案?