image
言飞

命运通过努力是可以改变的

ElasticSearch并发机制、悲观锁与乐观锁

言飞    2020-07-13 08:52

背景:

普通的ES操作流程

  • 1.先get document数据,商品信息,显示到网页上,同时在内存中缓存该document的数据
  • 2.当网页发生了购买之后,直接基于内存中的数据,进行计算和操作
  • 3.将计算后的结果写回ES中
我们期望的应该是说,线程A将库存-1 ,设置为99件;
然后线程B接着这个99件,将库存-1 ,变为98件,然后设置到ES中;
最终ES中应该库存是98件才对啊。。。

上面说的这个流程和过程,其实就是ES中的并发冲突问题,会导致数据不准确

方案:


悲观锁与乐观锁两种并发控制方案

悲观锁并发控制方案,就是在各种情况下,都上锁
上锁之后,就只有一个线程可以操作这一条数据了
当然,不同的场景下,上的锁不同,如:行级锁,表级锁,读锁,写锁
主要通过线程来判断当前的version是否相同,相同则写入新的数据
并同时更新数据version版本,防止错误更新

总结:
悲观锁与乐观锁优缺点:

1.悲观锁

  • 优点:方便,直接加锁,对应用程序来说,透明,不需要做额外的操作;
  • 缺点:并发能力很低,同一时间只能有一条线程操作数据

2.乐观锁

  • 优点:并发能力很高,不给数据加锁,大量线程并发操作
  • 缺点:麻烦,每次跟新的时候,都要先比对版本号,然后可能需要重新加载数据,再次修改,再写。这个过程,可能要重复好几次
Last Modified: 2020-07-13 08:52
Views: 1.8K

[[total]] comments

Post your comment
  1. [[item.time]]
    [[item.user.username]] [[item.floor]]Floor
  2. Click to load more...
  3. Post your comment