首页 > 其他 > 详细

乐观锁/悲观锁

时间:2019-05-25 11:46:59      阅读:33      评论:0      收藏:0      [点我收藏+]

标签:是什么   读取数据   leg   tex   乐观锁   语句   -s   不足   修改   

支付原则:

(1)支付结果必须先保存到数据库;

(2)当用户订单中某些产品购买状态异常,需要将整个订单回滚,给用户订单的异常提示(不能给用户做决定);

 

库存超卖/超买(事务):

原因:

(1)超卖出现在修改库存业务的方法中,并不是出现在数据库的更新语句中(mysql的update写操作不能并发执行);

(2)业务的方法中超卖造成 原因是什么,mysql的写操作和读操作可以并发执行,导致多个线程同时修改了一条库存不足的商品;

    当一个线程在修改数据,并还没有提交的时候,另一个线程来读取数据,读取到的是还没有提交时的数据(幻读)。

解决:事务锁

 

Select kc from t_mall_sku where id=id For update

 

 

乐观锁 (隐式锁)

Select version from t_mall_sku where id = id

Update t_mall_sku set kc = kc - ?,version= version +1  where id = id and version = version

 

二:基于字段的乐观锁

Select kc_version from t_mall_sku where id = id

Update t_mall_sku set kc = kc - ?, kc_version= kc_version +1  where id = id and kc_version = kc_version

 

1 支付结果必须先保存到数据库

2 当用户订单中某些产品购买状态异常,需要将整个订单回滚,给用户订单的异常提示(不能给用户做决定)

 

 

修改sku库存单元

库存超卖/超买(事务)

原因:

1 超卖出现在修改库存业务的方法中,并不是出现在数据库的更新语句中(mysqlupdate写操作不能并发执行)

2 业务的方法中超卖造成原因是什么,mysql的写操作和读操作可以并发执行,导致多个线程同时修改了一条库存不足的商品

解决:事务锁

 

Select kc from t_mall_sku where id=id For update

 

 

乐观锁 (隐式锁)

Select version from t_mall_sku where id = id

Update t_mall_sku set kc = kc - ?,version= version +1  where id = id and version = version

 

二:基于字段的乐观锁

Select kc_version from t_mall_sku where id = id

Update t_mall_sku set kc = kc - ?, kc_version= kc_version +1  where id = id and kc_version = kc_version

乐观锁/悲观锁

标签:是什么   读取数据   leg   tex   乐观锁   语句   -s   不足   修改   

原文:https://www.cnblogs.com/shiyun32/p/10921617.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号