事务下的锁

来源:34-7 py-redis-lock核心源码分析

三生三途

2021-01-23

goods_1【进程1】首先加锁,然后进行库存减少,成功会解锁,此时进行goods_2【进程1】的加锁,

与此同时进程2的goods_1获取到了锁,然后获取到了商品数量为100。因为进程1的事务没有执行完成,所以库存减少并没有写入数据库,此时还是会超卖啊。。。这段程序应该是有bug,不能在事务里加分布式锁吗?


http://img1.sycdn.imooc.com/szimg/600b963f0907851d17341144.jpg


http://img.mukewang.com/szimg/600b96f509c3dbd411140466.jpg

写回答

2回答

鼎晨要住顶层

2021-06-12

同学,我也被这个问题困住了,想问下你后面解决了么?

0
0

三生三途

提问者

2021-01-23

这里因为不是全局锁,是针对某个商品的锁,当商品解锁后,商品所属事务并没有结束,所以另外一个人获取到锁后读取的数量还是100,没有更新。。是不是要和乐观锁一起用呢。。

0
2
bobby
回复
三生三途
乐观锁肯定行啊,课程中详细的说明了乐观锁的原理,但是要注意,乐观锁只能用于数据库的执行上,不能像redis的分布式锁一样可以作用于任何代码上
2021-01-24
共2条回复

Go+Python打造电商系统 自研微服务框架 抓紧高薪机遇

快速转型Go工程师,成为具备双语言后端能力的开发者

512 学习 · 532 问题

查看课程