库存中心并发下锁、死锁

本文探讨了在并发环境下库存中心面临的锁和死锁问题,介绍了悲观锁、乐观锁以及数据库CAS操作的使用场景和注意事项。重点讨论了悲观锁的死锁陷阱,强调了数据排序和一致性的重要性。同时,提到了乐观锁实现中的版本号策略,并指出数据库的CAS操作在特定场景下的高效性。库存数据变化的复杂性和核对策略也被提及,包括库存流水记录和前值日志的重要性,以及与第三方系统的异步交互原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、并发下锁的问题:其实这有两个问题,第一并发下数据的脏读脏写,第二就是防止并发下导致为了防止脏读脏写的而产生的其他问题(例如死锁)。

这里不再阐述相关的锁机制,我只说明项目中使用的锁以及遇到的问题。

库存中心这里我使用了三种机制:悲观锁、乐观锁、数据库CAS操作。

个人认为悲观锁、乐观锁最终还是在代码逻辑层面去控制数据读写,悲观锁实现简单,但是坑多,乐观锁实现稍微复杂,效率也较高。CAS则是在我们写代码时时时刻刻要考虑到的问题,他能保证我们少走坑,保证数据准确性。

1.1为何使用悲观锁:

不言而喻,使用简单,对一般项目而言,并发要求不是非常高的前提下,悲观锁足以适用。但是悲观锁使用起来搞不好就死锁。

1.1.1使用坑点:不排序基本就会死锁,对悲观锁一定要排序(第一、主键排序,针对有些场景不适用,比如存在更新或者插入数据的混合操作,第二、其他字段排序,针对mysql、oracle等排序或者查询的字段必须是主键或者增加了索引的字段,不然会直接锁表,pgsql则还是行级锁,不过防止一切问题,还是针对加索引的字段排序。)

排序的数据跟更新数据顺序必须一致,不然一定死锁(这里不仅仅包括查询出来的数据,还要包括相关的数据,举个栗子:我查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值