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

场景需求

在秒杀活动或者是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代码
在这里插入图片描述

redis + lua代码
在这里插入图片描述

Redission

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

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

参考

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值