背景:
普通的ES操作流程
- 1.先get document数据,商品信息,显示到网页上,同时在内存中缓存该document的数据
- 2.当网页发生了购买之后,直接基于内存中的数据,进行计算和操作
- 3.将计算后的结果写回ES中

然后线程B接着这个99件,将库存-1 ,变为98件,然后设置到ES中;
最终ES中应该库存是98件才对啊。。。
上面说的这个流程和过程,其实就是ES中的并发冲突问题,会导致数据不准确
方案:
悲观锁与乐观锁两种并发控制方案

悲观锁并发控制方案,就是在各种情况下,都上锁
上锁之后,就只有一个线程可以操作这一条数据了
当然,不同的场景下,上的锁不同,如:行级锁,表级锁,读锁,写锁

并同时更新数据version版本,防止错误更新
总结:
悲观锁与乐观锁优缺点:
1.悲观锁
- 优点:方便,直接加锁,对应用程序来说,透明,不需要做额外的操作;
- 缺点:并发能力很低,同一时间只能有一条线程操作数据
2.乐观锁
- 优点:并发能力很高,不给数据加锁,大量线程并发操作
- 缺点:麻烦,每次跟新的时候,都要先比对版本号,然后可能需要重新加载数据,再次修改,再写。这个过程,可能要重复好几次