目录

1、超卖----库存为负

一、数据库:

1.1、字段设置为:unsigned+无符号整数

1.2、sql语句上进行判断,是否库存大于0

1.3、数据库乐观锁----version版本号

二、redis:

2.1、使用reids的  watch + multi +exec 指令实现

2.2、使用reids的 watch + multi +exec + setnx(创建一个redis锁) 指令实现

2.3、使用redis的push/pop(List)指令实现

2、少卖----库存有剩余


1、超卖----库存为负

问题描述:在高并发下,多个线程并发更新库存,导致库存为负的情况;

一、数据库:

1.1、字段设置为:unsigned+无符号整数

把库存字段改为unsigned,这样可以保证库存不为负数,如果并发情况下被扣为负数的时候会报错,这个时候try catch然后返回库存不足就可以了;

1.2、sql语句上进行判断,是否库存大于0

使用 case when 判断语句,例如:

update test_db set count = case when count >=1 then count-1 else count end

1.3、数据库乐观锁----version版本号

就是在数据库中加一个version字段来表示版本号,修改库存时先获取当前版本号,然后修改时就传入该版本号并且对当前版本号+1,这种相较于第一种就更科学,在性能上更优越,而且对于流量较大的秒杀场景而言容错率更高。

二、redis:

思路:一是redis自带的队列(redis是单线程的,故而可以并行转串行);

           二是redis自身的事务机制;

2.1、使用reids的  watch + multi +exec 指令实现

2.2、使用reids的 watch + multi +exec + setnx(创建一个redis锁) 指令实现

2.3、使用redis的push/pop(List)指令实现

使用redis的pop命令,如果能pop出来则证明还有库存,且秒杀成功,否则失败。

pop是原子性的,即使很高的并发,同时有很多用户访问,也是排队一个一个解决(并行转串行

问题:一个用户的多条线程,都可能进入到秒杀接口,如果在第一条线程正在下单但还没有设置成功下单标记前,那么此时第二条线程依然可以进入到秒杀接口进行下单;

解决方案:在第一条线程进行减库存前,先设置排队标记;

设置排队标记有两个目的,一是让前端轮询结果时知道是处于排队状态。二是让一个用户的一条线程参与秒杀,而非多条。

my点评:这个直接用redis并行转串行就可以了

针对超卖的情况,只剩一个库存被某人秒杀到了,但这人发出了两个请求,相隔时间很短,因此,在进入我们秒杀逻辑的时候:

request01:判断库存ok--->创建订单ok--->减库存ok

request02:判断库存ok(request01还没减库存前读取到的)--->创建订单ok--->减库存ok

这会造成库存为负;

解决办法:

request02:判断库存ok--->设置人员id和商品id的唯一主键,提交

my点评:这个直接用redis并行转串行就可以了

2、少卖----库存有剩余

问题描述:预扣库存的流程为【请求----redis减库存----创建订单----支付】,若redis库存减了,但下单过程中创建订单失败怎么办?

解决办法:失败后就应该让Redis的库存再加上1;

电商策略2----超卖、少卖相关推荐

  1. 有赞微商城运营、社交电商运营案例拆解002期——卖农产品月入百万,四线城市的「财富死角」究竟怎么赚大钱?

    有赞微商城运营.社交电商运营案例拆解002期--卖农产品月入百万,四线城市的「财富死角」究竟怎么赚大钱? 在小地方卖农产品,凭什么掀起大风浪?他给出了答案:一靠社区,二靠分销. *本文 1828 字, ...

  2. 电商直播两条路:孵化红人卖货给粉丝,或者用直播服务消费者

    ​ 当着一百多万人的面,初代网红罗永浩把他留了十几年的胡子刮掉了. 这不是愚人节的玩笑,而是罗永浩的正经带货.三个小时,累计观看销售1.1亿元,这是他的带货成绩单. 成绩不算差,但相比较成绩,奔着听相 ...

  3. 跨境电商如何自己搭建独立站卖手表鞋子等产品

    今年是跨境电商特别火的一年,许许多多的创业者也纷纷涌进这个赛道,许多人都从跨境电商这个领域赚到了人生的第一桶金,有一些通过跨境电商卖鞋子手表等的更是获得了丰厚的回报.但是经常面临一个问题,就是平台封店 ...

  4. 2021年随着纺织服装行业景气度走高,中国纺服B2B电商融资金额总计超19.5亿元[图]

    纺织服装是指以纺织面料为主要原料,经裁剪后缝制各种男.女服装,以及儿童成衣的活动.包括非自产原料制作的服装,以及固定生产地点的服装制做. 2021年四季度,国内疫情控制较好,国庆假期."双十 ...

  5. 子苗电商:抖音粉丝少怎么容易上热门?

    在抖音平台中,抖音用户们如果想要上热门的话,一定要有一个好的视频才行,当然你也可以花钱上热门,如果抖音用户的粉丝数量非常少的话,怎么做才能够更加容易的上热门呢?下面子苗电商小编就来讲一下. 账号的定位 ...

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

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

  7. 透过抖音电商,我窥见了安踏把产品卖爆的秘密!

    抖音电商助力,安踏抢拼618新商机! "哥哥,能帮我把鞋换成37码吗?买大一码的话,妈妈就能和我一起穿了." 前不久,@安踏体育 在抖音上po出这样一条视频.视频上,一对母女来到安 ...

  8. 疯狂的直播电商:卖惨、卖良心、卖假货!有人1小时赚1辆奔驰!

    来源:电商报(ID:kandianshang) 数据猿官网 | www.datayuan.cn 今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条 ...

  9. 秒杀系统设计4要素:硬抗高并发,拒绝超卖,避免少卖,打击黄牛

    双十一又要到了,牛牛有点慌,以前一个人的时候,一分钱都不花,现在有了女票,不仅得剁手,还得帮忙抢各种秒杀商品. 今年,牛牛真的不想再去抢秒杀了,为什么呢? 太难了,成千上万的人就盯着秒杀放出来的那点商 ...

最新文章

  1. Android 唯一标识获取
  2. java 循环读取文件_您如何用Java连续读取文件?
  3. Qt-QTableWidget设置只能选中一行
  4. python 类方法调用一次自增1_Python+selenium自动化脚本如何使数字每次执行自增1
  5. Leetcode 153. 寻找旋转排序数组中的最小值 (每日一题 20211014)
  6. JAVA POI 应用系列(2)--读取Excel
  7. tez安装官方文档整理+翻译
  8. android 更改软键盘_如何在Android的Google键盘上更改声音和振动
  9. idea中右侧的Maven框消失了
  10. 二叉树题目----6 二叉树的最近公共祖先 AND 二叉树搜索树转换成排序双向链表
  11. 论文浅尝 | 以知识图谱为基础的开放域对话生成的目标规划
  12. 【C语言】C语言里++能随便用吗?
  13. redis 多实例启动
  14. 今年中秋云遮月,来年元宵雨打灯
  15. 77. 组合 - 递归
  16. 金融、银行业务了解(自我盲点整理)
  17. 第二章 马原刷题(1)
  18. js new Date() 当前时间/指定时间转换为时间戳
  19. 计算机音乐加减乘除是什么音,音乐课堂里的“加减乘除”
  20. Failed to load JavaHL Library问题

热门文章

  1. java打印一个空心六边形_六边形架构 Java 实现
  2. 狂野飙车显示无法连接服务器,狂野飙车8:极速凌云无法连接服务器是什么原因...
  3. 九龙证券|外资放大招,400亿巨头狂飙!这只翻倍股却突然崩了
  4. eclipse安装jdt
  5. C++学习 std::tr1::shared_ptr使用的一点体会tr1库介绍
  6. Win10无法调节亮度解决方法
  7. 【JAVA长虹键法】第十式 桥接模式(23种设计模式)
  8. win10系统每天凌晨3点左右,自动关机重启
  9. python 作物识别_20行Python代码开发植物识别 app
  10. range在python中什么意思_python中range什么意思?