1、并发下锁的问题:其实这有两个问题,第一并发下数据的脏读脏写,第二就是防止并发下导致为了防止脏读脏写的而产生的其他问题(例如死锁)。
这里不再阐述相关的锁机制,我只说明项目中使用的锁以及遇到的问题。
库存中心这里我使用了三种机制:悲观锁、乐观锁、数据库CAS操作。
个人认为悲观锁、乐观锁最终还是在代码逻辑层面去控制数据读写,悲观锁实现简单,但是坑多,乐观锁实现稍微复杂,效率也较高。CAS则是在我们写代码时时时刻刻要考虑到的问题,他能保证我们少走坑,保证数据准确性。
1.1为何使用悲观锁:
不言而喻,使用简单,对一般项目而言,并发要求不是非常高的前提下,悲观锁足以适用。但是悲观锁使用起来搞不好就死锁。
1.1.1使用坑点:不排序基本就会死锁,对悲观锁一定要排序(第一、主键排序,针对有些场景不适用,比如存在更新或者插入数据的混合操作,第二、其他字段排序,针对mysql、oracle等排序或者查询的字段必须是主键或者增加了索引的字段,不然会直接锁表,pgsql则还是行级锁,不过防止一切问题,还是针对加索引的字段排序。)
排序的数据跟更新数据顺序必须一致,不然一定死锁(这里不仅仅包括查询出来的数据,还要包括相关的数据,举个栗子:我查