mysql乐观锁和悲观锁

悲观锁:数据库级别加锁
乐观锁:代码逻辑上控制, 没有任何锁和死锁, 一般用每次插入更新操作,累加int或者timestamp作为version字段

场景:商品库存扣减时,尤其是在秒杀、聚划算这种高并发的场景下,若采用version号作为乐观锁,则每次只有一个事务能更新成功,业务感知上就是大量操作失败。

悲观锁的缺点:高并发的数据库级别的锁行锁表噩梦啊

举例子:
更新前查询商品id为100, select kucun, version from kucun_table where id=100;
此时version=10, 也就是如果再更新version不变就说明是正常的,没有被修改过, 如果被修改过就说明有其他分布式程序已经修改了, 这次更新不作数。
更新:update kucun_table set kucun=kucun-1 where id=100 and version=10 and inventory-1>0;

posted @ 2020-04-16 19:15  Adamanter  阅读(118)  评论(0)    收藏  举报