场景:
-
停车位区域剩余车位数量更新,当有车辆进入停车区域,需要更新剩余停车位数量。
-
商品库存,高并发更新的情况下,
- 如果是直接做数量扣除,直接通过排他锁更新,将导致数据库压力极大甚至宕机,所以一般会有以下方案:
- 将库存数量加入缓存,在缓存中操作,比如利用redis的单线程特性。
- 采用分布式锁,将加锁环节提前到业务系统,降低数据库的压力,但是单纯的分布式锁还是会导致性能低下,优化的话可以考虑采用分段锁,将库存等分成多份,对每份都进行加锁处理。
- 如果是先读后修改,再更新的情况,并发下则会导致数据被覆盖,出现超卖情况。
- 如果是直接做数量扣除,直接通过排他锁更新,将导致数据库压力极大甚至宕机,所以一般会有以下方案: