• 悲观锁与乐观锁


    悲观锁:获取数据时对数据行锁定,其他事务要想获取锁,必须等原事务结束。

    在mysql中如何添加锁:

    查找df_goods_sku中id为12的货物信息,并拿到锁

    select * from df_goods_sku where id=12 for update

    这里要配置事务一起进行操作

    当事务结束时,锁就会释放。

    在django中如何加锁呢:

    sku = GoodsSKU.objects.select_for_update().get(id=12)

    乐观锁:在查询数据的时候不会加锁,但是在更新是会进行判断。

    判断更新时库存和之前查出的库存是否一致。

    在mysql中如何添加乐观锁:

    update df_goods_sku set stock=0, sales=1 where id=17 and stock=1

    在django中的写法是

    # 返回受影响的行数
    res = GoodsSKU.objects.filter(id=sku_id, stock=orgin_stock, update(stock=new_stock, sales=new_sales))

      注意: 这是MySQL的默认事务隔离级别,Repeatable Read(可重读)。因此我们需要在mysql中的配置文件,因此 添加上transaction-isolation = READ COMMITTED就可以了。

    锁的选择:

      1.在冲突比较少的时候使用乐观锁,冲突比较多的时候就是用悲观锁。

      2重复操作的代价比较大时也采用悲观锁。

  • 相关阅读:
    全民学python(01)
    如何从标准输入读入数据(2) -- c++语言
    如何从标准输入读入数据(1) -- java语言
    测试markdown格式
    java入门(6)--面向对象初探
    java入门(5)--数组
    java入门(4)--流程控制
    java入门(3)--函数
    java入门(2)--数据类型
    java入门(1)--介绍
  • 原文地址:https://www.cnblogs.com/zengsf/p/10098501.html
Copyright © 2020-2023  润新知