电商之库存超卖或者秒杀超卖问题

场景需求

在秒杀活动或者是11.11或者6.18场景中,对于某个商品在某个时间段,瞬间出现大量的的购买订单,导致库存读取不正确,销售量超过了实际的库存,但是超卖了

  1. 商品秒杀活动
  2. 11.11或者6.18

场景分析

todo

解决方案

适用架构: 单体架构
锁也是在单体架构中也是一个选择

  1. synchronize
  2. Lock

锁的实现有很多其他的方式,但是原理大概都是相同的。

优缺点

优点 缺点
不依赖第三方,比较简单 不适用分布式架构,而且比较重,性能消耗比较大

Redis + Lua

适用架构:单体+分布式

Redis

原理:redis本身支持多线程,操作是队列有序的

分析

setNx语句支持,Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。

Redis + Lua

原理
  1. 将在java中的非原子操作放在redis支持的原子操作脚本Lua中执行
  2. redis操作的单线程性,操作脚本是队列操作

分析(伪代码)

java代码
电商之库存超卖或者秒杀超卖问题_第1张图片

redis + lua代码
电商之库存超卖或者秒杀超卖问题_第2张图片

Redission

适用结构: 分布式结构(单体结构也适用,但是会牺牲部分的性能)

Redission是Alibaba开源的一个分布式锁,同时它基于redis,其实它的实现原理也是使用redis+lua

参考

1. 爆赞!商品秒杀巧用Redis与Lua预防库存超卖~

2. 快速入门Redis调用Lua脚本及使用场景介绍

你可能感兴趣的:(分布式,锁,lua,redis,开发语言)