image
言飞

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

免责声明:网站内容仅供个人学习记录,禁做商业用途,转载请注明出处。

版权所有 © 2017-2020 NEUSNCP个人学习笔记 辽ICP备17017855号-2

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

言飞    2020年7月13日 08:52:58

背景:

普通的ES操作流程

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

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

方案:


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

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

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

1.悲观锁

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

2.乐观锁

  • 优点:并发能力很高,不给数据加锁,大量线程并发操作
  • 缺点:麻烦,每次跟新的时候,都要先比对版本号,然后可能需要重新加载数据,再次修改,再写。这个过程,可能要重复好几次
最近更新: 2020年7月13日 08:52:58
浏览: 2.1K

[[total]] 条评论

添加评论
  1. [[item.time]]
    [[item.user.username]] [[item.floor]]楼
  2. 点击加载更多……
  3. 添加评论