乐观锁、悲观锁及memcached实现方案

来源:互联网 发布:中电数据服务 编辑:程序博客网 时间:2024/06/08 13:56

乐观锁与悲观锁

乐观锁与悲观锁的定义不再赘述,简单说一下我的理解。

乐观锁

假定不会出现并发问题,只有更新数据时才检查数据是否被锁定。

悲观锁

假定会出现并发问题,读取数据时即将数据锁定。

memcached实现

乐观锁

先假定一个场景:商品抢购。有N件商品,商品剩余数量存在memcached里,一个抢购的请求过来,商品剩余数量需减1,直到0。

  1. 读取商品剩余数量,并获取token,如果剩余数量为0,则退出
  2. 商品剩余数量减1
  3. 检查token并更新商品剩余数量
  4. 如果[3]失败,回到[1]

以上方案保证在高并发的场景下,同一时刻只有一个客户端可以抢购成功。

悲观锁

场景:审批流表单提交,两个客户端同时提交表单,欲将审批流从A状态更新到B状态。

  1. 检查待审批数据是否被锁定,是则退出
  2. 读取待审批数据,并在memcached中设置锁定标志
  3. 更新审批数据
  4. 删除锁定标志

以上方案可以保证同一时间,只有一个客户端能够更改审批流状态。

0 0